Skip to content

Instantly share code, notes, and snippets.

@aliou
Created February 17, 2026 17:10
Show Gist options
  • Select an option

  • Save aliou/6b6a7a0c24c117d361d8421b7a4eacf0 to your computer and use it in GitHub Desktop.

Select an option

Save aliou/6b6a7a0c24c117d361d8421b7a4eacf0 to your computer and use it in GitHub Desktop.
Pi session export
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Session Export</title>
<style>
:root {
--accent: #7a8aa6;
--border: #404040;
--borderAccent: #b39066;
--borderMuted: #333333;
--success: #afd787;
--error: #c95c5c;
--warning: #ffaf00;
--muted: #a0a8b0;
--dim: #606060;
--text: #e8e8d3;
--thinkingText: #9098A0;
--selectedBg: #1c1c1c;
--userMessageBg: #333333;
--userMessageText: #e8e8d3;
--customMessageBg: #403c41;
--customMessageText: #e8e8d3;
--customMessageLabel: #b39066;
--toolPendingBg: #1f1f1f;
--toolSuccessBg: #403c41;
--toolErrorBg: #40000a;
--toolTitle: #7a8aa6;
--toolOutput: #e8e8d3;
--mdHeading: #b39066;
--mdLink: #7a8aa6;
--mdLinkUrl: #9098A0;
--mdCode: #c7c7c7;
--mdCodeBlock: #e8e8d3;
--mdCodeBlockBorder: #777777;
--mdQuote: #a0a8b0;
--mdQuoteBorder: #777777;
--mdHr: #777777;
--mdListBullet: #7a8aa6;
--toolDiffAdded: #afd787;
--toolDiffRemoved: #c95c5c;
--toolDiffContext: #a0a8b0;
--syntaxComment: #606060;
--syntaxKeyword: #888888;
--syntaxFunction: #7a8aa6;
--syntaxVariable: #e8e8d3;
--syntaxString: #a08070;
--syntaxNumber: #b39066;
--syntaxType: #b39066;
--syntaxOperator: #777777;
--syntaxPunctuation: #c7c7c7;
--thinkingOff: #333333;
--thinkingMinimal: #777777;
--thinkingLow: #a0a8b0;
--thinkingMedium: #b39066;
--thinkingHigh: #7a8aa6;
--thinkingXhigh: #ffaf00;
--bashMode: #ffaf00;
--exportPageBg: rgb(36, 36, 36);
--exportCardBg: rgb(43, 43, 43);
--exportInfoBg: rgb(71, 66, 51);
--body-bg: rgb(36, 36, 36);
--container-bg: rgb(43, 43, 43);
--info-bg: rgb(71, 66, 51);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--line-height: 18px; /* 12px font * 1.5 */
}
body {
font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
font-size: 12px;
line-height: var(--line-height);
color: var(--text);
background: var(--body-bg);
}
#app {
display: flex;
min-height: 100vh;
}
/* Sidebar */
#sidebar {
width: 400px;
background: var(--container-bg);
flex-shrink: 0;
display: flex;
flex-direction: column;
position: sticky;
top: 0;
height: 100vh;
border-right: 1px solid var(--dim);
}
.sidebar-header {
padding: 8px 12px;
flex-shrink: 0;
}
.sidebar-controls {
padding: 8px 8px 4px 8px;
}
.sidebar-search {
width: 100%;
box-sizing: border-box;
padding: 4px 8px;
font-size: 11px;
font-family: inherit;
background: var(--body-bg);
color: var(--text);
border: 1px solid var(--dim);
border-radius: 3px;
}
.sidebar-filters {
display: flex;
padding: 4px 8px 8px 8px;
gap: 4px;
align-items: center;
flex-wrap: wrap;
}
.sidebar-search:focus {
outline: none;
border-color: var(--accent);
}
.sidebar-search::placeholder {
color: var(--muted);
}
.filter-btn {
padding: 3px 8px;
font-size: 10px;
font-family: inherit;
background: transparent;
color: var(--muted);
border: 1px solid var(--dim);
border-radius: 3px;
cursor: pointer;
}
.filter-btn:hover {
color: var(--text);
border-color: var(--text);
}
.filter-btn.active {
background: var(--accent);
color: var(--body-bg);
border-color: var(--accent);
}
.sidebar-close {
display: none;
padding: 3px 8px;
font-size: 12px;
font-family: inherit;
background: transparent;
color: var(--muted);
border: 1px solid var(--dim);
border-radius: 3px;
cursor: pointer;
margin-left: auto;
}
.sidebar-close:hover {
color: var(--text);
border-color: var(--text);
}
.tree-container {
flex: 1;
overflow: auto;
padding: 4px 0;
}
.tree-node {
padding: 0 8px;
cursor: pointer;
display: flex;
align-items: baseline;
font-size: 11px;
line-height: 13px;
white-space: nowrap;
}
.tree-node:hover {
background: var(--selectedBg);
}
.tree-node.active {
background: var(--selectedBg);
}
.tree-node.active .tree-content {
font-weight: bold;
}
.tree-node.in-path {
background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.tree-node:not(.in-path) {
opacity: 0.5;
}
.tree-node:not(.in-path):hover {
opacity: 1;
}
.tree-prefix {
color: var(--muted);
flex-shrink: 0;
font-family: monospace;
white-space: pre;
}
.tree-marker {
color: var(--accent);
flex-shrink: 0;
}
.tree-content {
color: var(--text);
}
.tree-role-user {
color: var(--accent);
}
.tree-role-assistant {
color: var(--success);
}
.tree-role-tool {
color: var(--muted);
}
.tree-muted {
color: var(--muted);
}
.tree-error {
color: var(--error);
}
.tree-compaction {
color: var(--borderAccent);
}
.tree-branch-summary {
color: var(--warning);
}
.tree-custom-message {
color: var(--customMessageLabel);
}
.tree-status {
padding: 4px 12px;
font-size: 10px;
color: var(--muted);
flex-shrink: 0;
}
/* Main content */
#content {
flex: 1;
overflow-y: auto;
padding: var(--line-height) calc(var(--line-height) * 2);
display: flex;
flex-direction: column;
align-items: center;
}
#content > * {
width: 100%;
max-width: 800px;
}
/* Help bar */
.help-bar {
font-size: 11px;
color: var(--warning);
margin-bottom: var(--line-height);
display: flex;
align-items: center;
gap: 12px;
}
.download-json-btn {
font-size: 10px;
padding: 2px 8px;
background: var(--container-bg);
border: 1px solid var(--border);
border-radius: 3px;
color: var(--text);
cursor: pointer;
font-family: inherit;
}
.download-json-btn:hover {
background: var(--hover);
border-color: var(--borderAccent);
}
/* Header */
.header {
background: var(--container-bg);
border-radius: 4px;
padding: var(--line-height);
margin-bottom: var(--line-height);
}
.header h1 {
font-size: 12px;
font-weight: bold;
color: var(--borderAccent);
margin-bottom: var(--line-height);
}
.header-info {
display: flex;
flex-direction: column;
gap: 0;
font-size: 11px;
}
.info-item {
color: var(--dim);
display: flex;
align-items: baseline;
}
.info-label {
font-weight: 600;
margin-right: 8px;
min-width: 100px;
}
.info-value {
color: var(--text);
flex: 1;
}
/* Messages */
#messages {
display: flex;
flex-direction: column;
gap: var(--line-height);
}
.message-timestamp {
font-size: 10px;
color: var(--dim);
opacity: 0.8;
}
.user-message {
background: var(--userMessageBg);
color: var(--userMessageText);
padding: var(--line-height);
border-radius: 4px;
position: relative;
}
.assistant-message {
padding: 0;
position: relative;
}
/* Copy link button - appears on hover */
.copy-link-btn {
position: absolute;
top: 8px;
right: 8px;
width: 28px;
height: 28px;
padding: 6px;
background: var(--container-bg);
border: 1px solid var(--dim);
border-radius: 4px;
color: var(--muted);
cursor: pointer;
opacity: 0;
transition: opacity 0.15s, background 0.15s, color 0.15s;
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
}
.user-message:hover .copy-link-btn,
.assistant-message:hover .copy-link-btn {
opacity: 1;
}
.copy-link-btn:hover {
background: var(--accent);
color: var(--body-bg);
border-color: var(--accent);
}
.copy-link-btn.copied {
background: var(--success, #22c55e);
color: white;
border-color: var(--success, #22c55e);
}
/* Highlight effect for deep-linked messages */
.user-message.highlight,
.assistant-message.highlight {
animation: highlight-pulse 2s ease-out;
}
@keyframes highlight-pulse {
0% {
box-shadow: 0 0 0 3px var(--accent);
}
100% {
box-shadow: 0 0 0 0 transparent;
}
}
.assistant-message > .message-timestamp {
padding-left: var(--line-height);
}
.assistant-text {
padding: var(--line-height);
padding-bottom: 0;
}
.message-timestamp + .assistant-text,
.message-timestamp + .thinking-block {
padding-top: 0;
}
.thinking-block + .assistant-text {
padding-top: 0;
}
.thinking-text {
padding: var(--line-height);
color: var(--thinkingText);
font-style: italic;
white-space: pre-wrap;
}
.message-timestamp + .thinking-block .thinking-text,
.message-timestamp + .thinking-block .thinking-collapsed {
padding-top: 0;
}
.thinking-collapsed {
display: none;
padding: var(--line-height);
color: var(--thinkingText);
font-style: italic;
}
/* Tool execution */
.tool-execution {
padding: var(--line-height);
border-radius: 4px;
}
.tool-execution + .tool-execution {
margin-top: var(--line-height);
}
.assistant-text + .tool-execution {
margin-top: var(--line-height);
}
.tool-execution.pending { background: var(--toolPendingBg); }
.tool-execution.success { background: var(--toolSuccessBg); }
.tool-execution.error { background: var(--toolErrorBg); }
.tool-header, .tool-name {
font-weight: bold;
}
.tool-path {
color: var(--accent);
word-break: break-all;
}
.line-numbers {
color: var(--warning);
}
.line-count {
color: var(--dim);
}
.tool-command {
font-weight: bold;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
word-break: break-word;
}
.tool-output {
margin-top: var(--line-height);
color: var(--toolOutput);
word-wrap: break-word;
overflow-wrap: break-word;
word-break: break-word;
font-family: inherit;
overflow-x: auto;
}
.tool-output > div,
.output-preview,
.output-full {
margin: 0;
padding: 0;
line-height: var(--line-height);
}
.tool-output pre {
margin: 0;
padding: 0;
font-family: inherit;
color: inherit;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
}
.tool-output code {
padding: 0;
background: none;
color: var(--text);
}
.tool-output.expandable {
cursor: pointer;
}
.tool-output.expandable:hover {
opacity: 0.9;
}
.tool-output.expandable .output-full {
display: none;
}
.tool-output.expandable.expanded .output-preview {
display: none;
}
.tool-output.expandable.expanded .output-full {
display: block;
}
.ansi-line {
white-space: pre-wrap;
}
.tool-images {
}
.tool-image {
max-width: 100%;
max-height: 500px;
border-radius: 4px;
margin: var(--line-height) 0;
}
.expand-hint {
color: var(--toolOutput);
}
/* Diff */
.tool-diff {
font-size: 11px;
overflow-x: auto;
white-space: pre;
}
.diff-added { color: var(--toolDiffAdded); }
.diff-removed { color: var(--toolDiffRemoved); }
.diff-context { color: var(--toolDiffContext); }
/* Model change */
.model-change {
padding: 0 var(--line-height);
color: var(--dim);
font-size: 11px;
}
.model-name {
color: var(--borderAccent);
font-weight: bold;
}
/* Compaction / Branch Summary - matches customMessage colors from TUI */
.compaction {
background: var(--customMessageBg);
border-radius: 4px;
padding: var(--line-height);
cursor: pointer;
}
.compaction-label {
color: var(--customMessageLabel);
font-weight: bold;
}
.compaction-collapsed {
color: var(--customMessageText);
}
.compaction-content {
display: none;
color: var(--customMessageText);
white-space: pre-wrap;
margin-top: var(--line-height);
}
.compaction.expanded .compaction-collapsed {
display: none;
}
.compaction.expanded .compaction-content {
display: block;
}
/* System prompt */
.system-prompt {
background: var(--customMessageBg);
padding: var(--line-height);
border-radius: 4px;
margin-bottom: var(--line-height);
}
.system-prompt.expandable {
cursor: pointer;
}
.system-prompt-header {
font-weight: bold;
color: var(--customMessageLabel);
}
.system-prompt-preview {
color: var(--customMessageText);
white-space: pre-wrap;
word-wrap: break-word;
font-size: 11px;
margin-top: var(--line-height);
}
.system-prompt-expand-hint {
color: var(--muted);
font-style: italic;
margin-top: 4px;
}
.system-prompt-full {
display: none;
color: var(--customMessageText);
white-space: pre-wrap;
word-wrap: break-word;
font-size: 11px;
margin-top: var(--line-height);
}
.system-prompt.expanded .system-prompt-preview,
.system-prompt.expanded .system-prompt-expand-hint {
display: none;
}
.system-prompt.expanded .system-prompt-full {
display: block;
}
.system-prompt.provider-prompt {
border-left: 3px solid var(--warning);
}
.system-prompt-note {
font-size: 10px;
font-style: italic;
color: var(--muted);
margin-top: 4px;
}
/* Tools list */
.tools-list {
background: var(--customMessageBg);
padding: var(--line-height);
border-radius: 4px;
margin-bottom: var(--line-height);
}
.tools-header {
font-weight: bold;
color: var(--customMessageLabel);
margin-bottom: var(--line-height);
}
.tool-item {
font-size: 11px;
}
.tool-item-name {
font-weight: bold;
color: var(--text);
}
.tool-item-desc {
color: var(--dim);
}
.tool-params-hint {
color: var(--muted);
font-style: italic;
}
.tool-item:has(.tool-params-hint) {
cursor: pointer;
}
.tool-params-hint::after {
content: '[click to show parameters]';
}
.tool-item.params-expanded .tool-params-hint::after {
content: '[hide parameters]';
}
.tool-params-content {
display: none;
margin-top: 4px;
margin-left: 12px;
padding-left: 8px;
border-left: 1px solid var(--dim);
}
.tool-item.params-expanded .tool-params-content {
display: block;
}
.tool-param {
margin-bottom: 4px;
font-size: 11px;
}
.tool-param-name {
font-weight: bold;
color: var(--text);
}
.tool-param-type {
color: var(--dim);
font-style: italic;
}
.tool-param-required {
color: var(--warning, #e8a838);
font-size: 10px;
}
.tool-param-optional {
color: var(--dim);
font-size: 10px;
}
.tool-param-desc {
color: var(--dim);
margin-left: 8px;
}
/* Hook/custom messages */
.hook-message {
background: var(--customMessageBg);
color: var(--customMessageText);
padding: var(--line-height);
border-radius: 4px;
}
.hook-type {
color: var(--customMessageLabel);
font-weight: bold;
}
/* Branch summary */
.branch-summary {
background: var(--customMessageBg);
padding: var(--line-height);
border-radius: 4px;
}
.branch-summary-header {
font-weight: bold;
color: var(--borderAccent);
}
/* Error */
.error-text {
color: var(--error);
padding: 0 var(--line-height);
}
.tool-error {
color: var(--error);
}
/* Images */
.message-images {
margin-bottom: 12px;
}
.message-image {
max-width: 100%;
max-height: 400px;
border-radius: 4px;
margin: var(--line-height) 0;
}
/* Markdown content */
.markdown-content h1,
.markdown-content h2,
.markdown-content h3,
.markdown-content h4,
.markdown-content h5,
.markdown-content h6 {
color: var(--mdHeading);
margin: var(--line-height) 0 0 0;
font-weight: bold;
}
.markdown-content h1 { font-size: 1em; }
.markdown-content h2 { font-size: 1em; }
.markdown-content h3 { font-size: 1em; }
.markdown-content h4 { font-size: 1em; }
.markdown-content h5 { font-size: 1em; }
.markdown-content h6 { font-size: 1em; }
.markdown-content p { margin: 0; }
.markdown-content p + p { margin-top: var(--line-height); }
.markdown-content a {
color: var(--mdLink);
text-decoration: underline;
}
.markdown-content code {
background: rgba(128, 128, 128, 0.2);
color: var(--mdCode);
padding: 0 4px;
border-radius: 3px;
font-family: inherit;
}
.markdown-content pre {
background: transparent;
margin: var(--line-height) 0;
overflow-x: auto;
}
.markdown-content pre code {
display: block;
background: none;
color: var(--text);
}
.markdown-content blockquote {
border-left: 3px solid var(--mdQuoteBorder);
padding-left: var(--line-height);
margin: var(--line-height) 0;
color: var(--mdQuote);
font-style: italic;
}
.markdown-content ul,
.markdown-content ol {
margin: var(--line-height) 0;
padding-left: calc(var(--line-height) * 2);
}
.markdown-content li { margin: 0; }
.markdown-content li::marker { color: var(--mdListBullet); }
.markdown-content hr {
border: none;
border-top: 1px solid var(--mdHr);
margin: var(--line-height) 0;
}
.markdown-content table {
border-collapse: collapse;
margin: 0.5em 0;
width: 100%;
}
.markdown-content th,
.markdown-content td {
border: 1px solid var(--mdCodeBlockBorder);
padding: 6px 10px;
text-align: left;
}
.markdown-content th {
background: rgba(128, 128, 128, 0.1);
font-weight: bold;
}
.markdown-content img {
max-width: 100%;
border-radius: 4px;
}
/* Syntax highlighting */
.hljs { background: transparent; color: var(--text); }
.hljs-comment, .hljs-quote { color: var(--syntaxComment); }
.hljs-keyword, .hljs-selector-tag { color: var(--syntaxKeyword); }
.hljs-number, .hljs-literal { color: var(--syntaxNumber); }
.hljs-string, .hljs-doctag { color: var(--syntaxString); }
/* Function names: hljs v11 uses .hljs-title.function_ compound class */
.hljs-function, .hljs-title, .hljs-title.function_, .hljs-section, .hljs-name { color: var(--syntaxFunction); }
/* Types: hljs v11 uses .hljs-title.class_ for class names */
.hljs-type, .hljs-class, .hljs-title.class_, .hljs-built_in { color: var(--syntaxType); }
.hljs-attr, .hljs-variable, .hljs-variable.language_, .hljs-params, .hljs-property { color: var(--syntaxVariable); }
.hljs-meta, .hljs-meta .hljs-keyword, .hljs-meta .hljs-string { color: var(--syntaxKeyword); }
.hljs-operator { color: var(--syntaxOperator); }
.hljs-punctuation { color: var(--syntaxPunctuation); }
.hljs-subst { color: var(--text); }
/* Footer */
.footer {
margin-top: 48px;
padding: 20px;
text-align: center;
color: var(--dim);
font-size: 10px;
}
/* Mobile */
#hamburger {
display: none;
position: fixed;
top: 10px;
left: 10px;
z-index: 100;
padding: 3px 8px;
font-size: 12px;
font-family: inherit;
background: transparent;
color: var(--muted);
border: 1px solid var(--dim);
border-radius: 3px;
cursor: pointer;
}
#hamburger:hover {
color: var(--text);
border-color: var(--text);
}
#sidebar-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 98;
}
@media (max-width: 900px) {
#sidebar {
position: fixed;
left: -400px;
width: 400px;
top: 0;
bottom: 0;
height: 100vh;
z-index: 99;
transition: left 0.3s;
}
#sidebar.open {
left: 0;
}
#sidebar-overlay.open {
display: block;
}
#hamburger {
display: block;
}
.sidebar-close {
display: block;
}
#content {
padding: var(--line-height) 16px;
}
#content > * {
max-width: 100%;
}
}
@media (max-width: 500px) {
#sidebar {
width: 100vw;
left: -100vw;
}
}
@media print {
#sidebar, #sidebar-toggle { display: none !important; }
body { background: white; color: black; }
#content { max-width: none; }
}
</style>
</head>
<body>
<button id="hamburger" title="Open sidebar"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" stroke="none"><circle cx="6" cy="6" r="2.5"/><circle cx="6" cy="18" r="2.5"/><circle cx="18" cy="12" r="2.5"/><rect x="5" y="6" width="2" height="12"/><path d="M6 12h10c1 0 2 0 2-2V8"/></svg></button>
<div id="sidebar-overlay"></div>
<div id="app">
<aside id="sidebar">
<div class="sidebar-header">
<div class="sidebar-controls">
<input type="text" class="sidebar-search" id="tree-search" placeholder="Search...">
</div>
<div class="sidebar-filters">
<button class="filter-btn active" data-filter="default" title="Hide settings entries">Default</button>
<button class="filter-btn" data-filter="no-tools" title="Default minus tool results">No-tools</button>
<button class="filter-btn" data-filter="user-only" title="Only user messages">User</button>
<button class="filter-btn" data-filter="labeled-only" title="Only labeled entries">Labeled</button>
<button class="filter-btn" data-filter="all" title="Show everything">All</button>
<button class="sidebar-close" id="sidebar-close" title="Close">✕</button>
</div>
</div>
<div class="tree-container" id="tree-container"></div>
<div class="tree-status" id="tree-status"></div>
</aside>
<main id="content">
<div id="header-container"></div>
<div id="messages"></div>
</main>
<div id="image-modal" class="image-modal">
<img id="modal-image" src="" alt="">
</div>
</div>
<script id="session-data" type="application/json">
eyJoZWFkZXIiOnsidHlwZSI6InNlc3Npb24iLCJ2ZXJzaW9uIjozLCJpZCI6ImJlNmUwZGJhLTA1OGMtNGEyMi1iNDZlLTMyYTEwZTEwMmI0ZiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NDA6MzguNTI1WiIsImN3ZCI6Ii9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlIn0sImVudHJpZXMiOlt7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiZGE0ZGE0OSIsInBhcmVudElkIjoiMGU4MzNiNmUiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUwOjQyLjUwMVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0Ijoic2NhZmZvbGQgdGhpcyBleHRlbnNpb24uIFRoZSBleHRlbnNpb24gd2lsbCBhZGQgVGFpbHNjYWxlIEFwZXJ0dXJlIHN1cHBvcnQgdG8gUEkuIFRvIGRvIHNvLCBpdCB3aWxsIHVzZSB0aGUgY29uZmlnLnV0aWxzIHBhY2thZ2UgdG8gaGF2ZSBhIHNldHRpbmdzIHBhZ2UuIFRoYXQgc2V0dGluZ3MgcGFnZSB3aWxsIGFsbG93IHlvdSB0byBkZWZpbmUgcHJvdmlkZXJzLCBib3RoIHRvIGRlZmluZSBwcm92aWRlcnMsIGJ1dCBhbHNvIHRvIGRlZmluZSBhIGJhc2VVcmwgdG8gdXNlIGZvciB0aG9zZSBwcm92aWRlcnMuIFxuXG51c2UgdGhlIEBhbGlvdS9waS11dGlscy1zZXR0aW5ncyBmb3IgdGhlIHNldHRpbmdzLlxuXG5gYXBlcnR1cmVgIGlzIHRoZSBzZXR0aW5ncyBwcmVmaXggbmFtZS4gXG5cbmxvb2sgYXQgfi90bXAvMjAyNi0wMi0xNy1waS1hcGVydHVyZS9pbmRleC50cyBmb3IgdGhlIHBvYyBmb2N1c2VkIG9uIG9wZW5yb3V0ZXIuXG5cbml0IHNob3VsZCBhbHNvIGhhdmUgYSBgYXBlcnR1cmU6c2V0dXBgIGNvbW1hbmQgdGhhdCBpcyBhbiBpbnRlcmFjdGl2ZSB3aXphcmQ6XG4tIGFza3MgZm9yIHlvdXIgYXBlcnR1cmUgYmFzZSB1cmwuIHBsYWNlaG9sZGVyIHNob3VsZCBhaS5wYW5nby1saW4udHMubmV0XG4tIGFza3MgZm9yIHByb3ZpZGVyIHRvIHVzZSB3aXRoIGFwZXJ0dXJlLiB0aGlzIHNob3VsZCBiZSBhIHNlbGVjdCBjb21wb25lbnQgd2l0aCBmdXp6eSBzZWFyY2guIG1ha2Ugc3VyZSB0byBsb29rIGF0IHRoZSBhdmFpbGFibGUgY29tcG9uZW50cyB0byB1c2UgaXQuXG4tIHRoZW4gaXQgcmVnaXN0ZXJzIHByb3ZpZGVycyB3aXRoIHRoZSBvdmVycmlkZW50IGJhc2UgdXJsIGFuZCB0aGUgYXBpIGAtYCBcblxudGhlbiBpbiB0aGUgc2V0dGluZ3MsIGFsbG93IHVwZGF0aW5nIGJvdGggdGhlIGJhc2UgdXJsIGFuZCB0aGUgcHJvdmlkZXIgbGlzdC4gXG5cbnJlYWQgdGhlIGRvY3VtZW50YXRpb24gcGFnZTogaHR0cHM6Ly90YWlsc2NhbGUuY29tL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmVcblxuYW5kIHRoZW4gbWFrZSBhIHBsYW4gZm9yIHRoZSBpbXBsZW1lbnRhdGlvbi4ifV0sInRpbWVzdGFtcCI6MTc3MTM0NzA0MjQ5M319LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiNzM4MzFhMTciLCJwYXJlbnRJZCI6ImJkYTRkYTQ5IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MDo0OC4xNjFaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMjAxN2Q0ZWEiLCJwYXJlbnRJZCI6IjczODMxYTE3IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MDo0OC4xNjFaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiXG5cbiJ9LHsidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiJMZXQgbWUgc3RhcnQgYnkgcmVhZGluZyB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhbmQgZmlsZXMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgbmVlZGVkLiIsInRoaW5raW5nU2lnbmF0dXJlIjoiRW9FQ0NrWUlDeGdDS2tBQ3NYSDh5TWRxQlBNUE9XN3dkRTdFWHIvZHFjWEVlcDFJOEgyREhiSWxwL1V4eDZXbGlWa3g0VUtySUc3Kzd3TzQvU0loUW50WHpZREZxajFWUVNjVkVnekhwU2ZVY1VHc0pFVit3KzhhREFGOFUyekx1L2xjOWROeUtTSXdaQ1lpWW1rb0lLVWFpWWZqQmtmZDJ3djFYY3VoYVh0UHFpbVFrakNGTmhPZ0ZlSHpKc0kvODMyOWFmNHA3UEZSS21rL0lzRDRic2hGckNiamFEM0VDcFVvL0tMTFh1d3lSc28rTXZXUHlUcmZiQzAvenNXWlB2Q2p2T3k0elo2MkoyRk92VFhOM3dIa09VSW9IZzNleFBHQXZZRGEyd2k0SE84THdybWRqVmtxMm84TlZTejRIRUxEQnU1WVdNLzZnNHZObWhHVDU0TDJ6ekFZQVE9PSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMUs3SkV2bXNuQmpjVkRBNnY5TGJ5NFciLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL3Zhci9mb2xkZXJzL1tSRURBQ1RFRF0vVC9waS1leHRlbnNpb25zL25wbS9mMzViMjEyOS9ub2RlX21vZHVsZXMvQGFsaW91L3BpLWV4dGVuc2lvbi1kZXYvc2tpbGxzL3BpLWV4dGVuc2lvbi9TS0lMTC5tZCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFTb21NYTllNk1wQ1hkUkJua2ZaMjZkIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9Vc2Vycy9hbGlvdWRpYWxsby90bXAvMjAyNi0wMi0xNy1waS1hcGVydHVyZS9pbmRleC50cyJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFHSFBqMlh5Wk1vVUs0UThBNVBGd2lpIiwibmFtZSI6InNjb3V0IiwiYXJndW1lbnRzIjp7InVybCI6Imh0dHBzOi8vdGFpbHNjYWxlLmNvbS9kb2NzL2ZlYXR1cmVzL2FwZXJ0dXJlIiwicHJvbXB0IjoiV2hhdCBpcyBUYWlsc2NhbGUgQXBlcnR1cmU/IEhvdyBkb2VzIGl0IHdvcms/IFdoYXQgcHJvdmlkZXJzIGRvZXMgaXQgc3VwcG9ydD8gSG93IGRvIHlvdSBjb25maWd1cmUgaXQ/In19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjozLCJvdXRwdXQiOjMwMCwiY2FjaGVSZWFkIjowLCJjYWNoZVdyaXRlIjo5MjEyLCJ0b3RhbFRva2VucyI6OTUxNSwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMTUwMDAwMDAwMDAwMDAwMDIsIm91dHB1dCI6MC4wMDc1MDAwMDAwMDAwMDAwMDEsImNhY2hlUmVhZCI6MCwiY2FjaGVXcml0ZSI6MC4wNTc1NzUsInRvdGFsIjowLjA2NTA5MDAwMDAwMDAwMDAxfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3MDQyNDk4fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAocmVhZCkifSwiaWQiOiI3YTI5MzAxYSIsInBhcmVudElkIjoiMjAxN2Q0ZWEiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUwOjQ4LjE3MFoifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI1ODVjMzU1NiIsInBhcmVudElkIjoiN2EyOTMwMWEiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUwOjQ4LjE5MVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxSzdKRXZtc25CamNWREE2djlMYnk0VyIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii0tLVxubmFtZTogcGktZXh0ZW5zaW9uXG5kZXNjcmlwdGlvbjogQ3JlYXRlLCB1cGRhdGUsIGFuZCBwdWJsaXNoIFBpIGV4dGVuc2lvbnMuIFVzZSB3aGVuIHdvcmtpbmcgb24gZXh0ZW5zaW9ucyBpbiB0aGlzIHJlcG9zaXRvcnkuXG4tLS1cblxuIyBQaSBFeHRlbnNpb24gRGV2ZWxvcG1lbnRcblxuR3VpZGUgZm9yIGNyZWF0aW5nIGFuZCBtYWludGFpbmluZyBQaSBleHRlbnNpb25zLiBSZWFkIHRoZSByZWxldmFudCByZWZlcmVuY2UgZmlsZXMgYmVmb3JlIGltcGxlbWVudGluZy5cblxuIyMgS2V5IEltcG9ydHNcblxuYGBgdHlwZXNjcmlwdFxuLy8gQ29yZSB0eXBlc1xuaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25BUEksIEV4dGVuc2lvbkNvbnRleHQsIFRvb2xEZWZpbml0aW9uLCBQcm92aWRlckRlZmluaXRpb24gfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcblxuLy8gU2NoZW1hIChUeXBlQm94KVxuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiO1xuXG4vLyBUVUkgY29tcG9uZW50c1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnQsIFRoZW1lIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI7XG5pbXBvcnQgeyBUZXh0LCBCb3gsIENvbnRhaW5lciwgU2VsZWN0TGlzdCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLXR1aVwiO1xuXG4vLyBVdGlsaXRpZXNcbmltcG9ydCB7IHRydW5jYXRlSGVhZCwgaGlnaGxpZ2h0Q29kZSwgZ2V0TGFuZ3VhZ2VGcm9tUGF0aCwgRHluYW1pY0JvcmRlciwgQm9yZGVyZWRMb2FkZXIgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcbmBgYFxuXG4jIyBXb3JrZmxvd1xuXG4jIyMgQ3JlYXRpbmcgYSBOZXcgRXh0ZW5zaW9uXG5cbjEuIFJlYWQgYHJlZmVyZW5jZXMvc3RydWN0dXJlLm1kYCBmb3IgdGhlIHByb2plY3QgbGF5b3V0IGFuZCBwYWNrYWdlLmpzb24gdGVtcGxhdGUuXG4yLiBDcmVhdGUgdGhlIGVudHJ5IHBvaW50IChgc3JjL2luZGV4LnRzYCkgd2l0aCBhIGRlZmF1bHQgZXhwb3J0IGZ1bmN0aW9uLlxuMy4gRGVjaWRlIHdoYXQgdGhlIGV4dGVuc2lvbiBwcm92aWRlczpcbiAgIC0gKipUb29scyoqIChMTE0tY2FsbGFibGUpOiBSZWFkIGByZWZlcmVuY2VzL3Rvb2xzLm1kYC5cbiAgIC0gKipDb21tYW5kcyoqICh1c2VyLWludm9rZWQpOiBSZWFkIGByZWZlcmVuY2VzL2NvbW1hbmRzLm1kYC5cbiAgIC0gKipQcm92aWRlcnMqKiAoTExNIGJhY2tlbmRzKTogUmVhZCBgcmVmZXJlbmNlcy9wcm92aWRlcnMubWRgLlxuICAgLSAqKkhvb2tzKiogKGV2ZW50IGhhbmRsZXJzKTogUmVhZCBgcmVmZXJlbmNlcy9ob29rcy5tZGAuIEluY2x1ZGVzIGJvdGggYHRvb2xfY2FsbGAgYmxvY2tpbmcgaG9va3MgYW5kIHNwYXduIGhvb2tzIGZvciB0cmFuc3BhcmVudCBjb21tYW5kIHJld3JpdGluZyB2aWEgYGNyZWF0ZUJhc2hUb29sYC5cbjQuIFJlYWQgYHJlZmVyZW5jZXMvbW9kZXMubWRgIGZvciBtb2RlLWF3YXJlbmVzcyBndWlkZWxpbmVzLiBFdmVyeSBleHRlbnNpb24gbXVzdCBoYW5kbGUgSW50ZXJhY3RpdmUsIFJQQywgYW5kIFByaW50IG1vZGVzLlxuNS4gSWYgdGhlIGV4dGVuc2lvbiBkaXNwbGF5cyByaWNoIFVJOiBSZWFkIGByZWZlcmVuY2VzL2NvbXBvbmVudHMubWRgIGZvciBUVUkgY29tcG9uZW50cyBhbmQgYHJlZmVyZW5jZXMvbWVzc2FnZXMubWRgIGZvciBtZXNzYWdlIGRpc3BsYXkgcGF0dGVybnMuXG42LiBJZiB0aGUgZXh0ZW5zaW9uIHRyYWNrcyBzdGF0ZTogUmVhZCBgcmVmZXJlbmNlcy9zdGF0ZS5tZGAuXG43LiBGb3IgbGVzcyBjb21tb24gQVBJczogUmVhZCBgcmVmZXJlbmNlcy9hZGRpdGlvbmFsLWFwaXMubWRgLlxuOC4gQmVmb3JlIHB1Ymxpc2hpbmc6IFJlYWQgYHJlZmVyZW5jZXMvcHVibGlzaC5tZGAgYW5kIGByZWZlcmVuY2VzL2RvY3VtZW50YXRpb24ubWRgLlxuXG4jIyMgTW9kaWZ5aW5nIGFuIEV4aXN0aW5nIEV4dGVuc2lvblxuXG4xLiBSZWFkIHRoZSBleHRlbnNpb24ncyBgaW5kZXgudHNgIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZS5cbjIuIFJlYWQgdGhlIHJlbGV2YW50IHJlZmVyZW5jZSBmaWxlIGZvciB0aGUgYXJlYSB5b3UgYXJlIG1vZGlmeWluZy5cbjMuIENoZWNrIGByZWZlcmVuY2VzL21vZGVzLm1kYCBpZiBhZGRpbmcgYW55IFVJIGludGVyYWN0aW9uLlxuNC4gUnVuIHR5cGUgY2hlY2tpbmcgYWZ0ZXIgY2hhbmdlcy5cblxuIyMgUmVmZXJlbmNlIEZpbGVzXG5cbnwgRmlsZSB8IENvbnRlbnQgfFxufC0tLXwtLS18XG58IGByZWZlcmVuY2VzL3N0cnVjdHVyZS5tZGAgfCBQcm9qZWN0IGxheW91dCwgcGFja2FnZS5qc29uLCB0c2NvbmZpZywgZW50cnkgcG9pbnQsIEFQSSBrZXkgcGF0dGVybiwgaW1wb3J0cyB8XG58IGByZWZlcmVuY2VzL3Rvb2xzLm1kYCB8IFRvb2wgcmVnaXN0cmF0aW9uLCBleGVjdXRlIHNpZ25hdHVyZSwgcGFyYW1ldGVycywgc3RyZWFtaW5nLCByZW5kZXJpbmcsIG5hbWluZywgcmVuZGVyQ2FsbC9yZW5kZXJSZXN1bHQgVUkgZ3VpZGVsaW5lcyB8XG58IGByZWZlcmVuY2VzL2hvb2tzLm1kYCB8IEV2ZW50cywgYmxvY2tpbmcvY2FuY2VsbGluZywgaW5wdXQgdHJhbnNmb3JtYXRpb24sIHN5c3RlbSBwcm9tcHQgbW9kaWZpY2F0aW9uLCBiYXNoIHNwYXduIGhvb2tzIChjb21tYW5kIHJld3JpdGluZykgfFxufCBgcmVmZXJlbmNlcy9jb21tYW5kcy5tZGAgfCBDb21tYW5kIHJlZ2lzdHJhdGlvbiwgdGhyZWUtdGllciBwYXR0ZXJuLCBjb21wb25lbnQgZXh0cmFjdGlvbiB8XG58IGByZWZlcmVuY2VzL2NvbXBvbmVudHMubWRgIHwgVFVJIGNvbXBvbmVudHMgKHBpLXR1aSArIHBpLWNvZGluZy1hZ2VudCksIGN1c3RvbSgpLCB0aGVtZSBzdHlsaW5nLCBrZXlib2FyZCBoYW5kbGluZyB8XG58IGByZWZlcmVuY2VzL3Byb3ZpZGVycy5tZGAgfCBQcm92aWRlciByZWdpc3RyYXRpb24sIG1vZGVsIGRlZmluaXRpb24sIGNvbXBhdCBmaWVsZCwgQVBJIGtleSBnYXRpbmcgfFxufCBgcmVmZXJlbmNlcy9tb2Rlcy5tZGAgfCBNb2RlIGJlaGF2aW9yIG1hdHJpeCwgY3R4Lmhhc1VJLCBkaWFsb2cgdnMgZmlyZS1hbmQtZm9yZ2V0LCB0aHJlZS10aWVyIHBhdHRlcm4gfFxufCBgcmVmZXJlbmNlcy9tZXNzYWdlcy5tZGAgfCBzZW5kTWVzc2FnZSwgcmVnaXN0ZXJNZXNzYWdlUmVuZGVyZXIsIG5vdGlmeSwgd2hlbiB0byB1c2UgZWFjaCB8XG58IGByZWZlcmVuY2VzL3N0YXRlLm1kYCB8IGFwcGVuZEVudHJ5LCBzdGF0ZSByZWNvbnN0cnVjdGlvbiwgYXBwZW5kRW50cnkgdnMgc2VuZE1lc3NhZ2UgfFxufCBgcmVmZXJlbmNlcy9hZGRpdGlvbmFsLWFwaXMubWRgIHwgU2hvcnRjdXRzLCBmbGFncywgZXhlYywgc2VuZFVzZXJNZXNzYWdlLCBzZXNzaW9uIG5hbWUsIGxhYmVscywgbW9kZWwgY29udHJvbCwgRXZlbnRCdXMsIHRoZW1lLCBVSSBjdXN0b21pemF0aW9uIHxcbnwgYHJlZmVyZW5jZXMvcHVibGlzaC5tZGAgfCBucG0gcHVibGlzaGluZywgY2hhbmdlc2V0cywgdmVyc2lvbmluZywgcHJlLXB1Ymxpc2ggY2hlY2tsaXN0IHxcbnwgYHJlZmVyZW5jZXMvdGVzdGluZy5tZGAgfCBMb2NhbCBkZXZlbG9wbWVudCwgdHlwZSBjaGVja2luZywgbWFudWFsIHRlc3RpbmcsIGRlYnVnZ2luZyB8XG58IGByZWZlcmVuY2VzL2RvY3VtZW50YXRpb24ubWRgIHwgUkVBRE1FIHRlbXBsYXRlLCB3aGF0IHRvIGRvY3VtZW50LCBjaGFuZ2Vsb2cgfFxuXG4jIyBSZWZlcmVuY2UgRXh0ZW5zaW9uc1xuXG5XaGVuIGltcGxlbWVudGluZywgbG9vayBhdCB0aGVzZSBleGlzdGluZyBleHRlbnNpb25zIGZvciBwYXR0ZXJuczpcblxuKipTdGFuZGFsb25lIHJlcG9zIChyZWNvbW1lbmRlZCBzdHJ1Y3R1cmUpOioqXG4tIGBwaS1saW5rdXBgIChgL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktbGlua3VwL2ApOiBUb29scyB3cmFwcGluZyBhIHRoaXJkLXBhcnR5IEFQSS4gSGFzIHRvb2xzLCBhIGNvbW1hbmQsIGN1c3RvbSBtZXNzYWdlIHJlbmRlcmluZywgQVBJIGtleSBnYXRpbmcuXG4tIGBwaS1zeW50aGV0aWNgIChgL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktc3ludGhldGljL2ApOiBQcm92aWRlciArIHRvb2xzLiBIYXMgYSBwcm92aWRlciB3aXRoIG1vZGVscywgYSBjb21tYW5kIHdpdGggYGN1c3RvbSgpYCBjb21wb25lbnQsIEFQSSBrZXkgZ2F0aW5nLCBhc3luYyBlbnRyeSBwb2ludC5cblxuKipNb25vcmVwbyBleHRlbnNpb25zIChzaW1wbGVyIHN0cnVjdHVyZSk6Kipcbi0gYGV4dGVuc2lvbnMvZGVmYXVsdHMvYCBpbiB0aGlzIHJlcG86IFNpbXBsZSB0b29sIHJlZ2lzdHJhdGlvbiAoZ2V0X2N1cnJlbnRfdGltZSkuXG4tIGBleHRlbnNpb25zL2d1YXJkcmFpbHMvYCBpbiB0aGlzIHJlcG86IEV2ZW50IGhvb2tzICh0b29sX2NhbGwgYmxvY2tpbmcpLiBIYXMgYGhvb2tzL2AsIGBjb21tYW5kcy9gLCBgY29tcG9uZW50cy9gLCBgdXRpbHMvYCBkaXJlY3RvcmllcyB3aXRoIGNvbmZpZyB0eXBlcyBpbiBgY29uZmlnLnRzYC5cbi0gYGV4dGVuc2lvbnMvdG9vbGNoYWluL2AgaW4gdGhpcyByZXBvOiBCYXNoIHNwYXduIGhvb2tzIChjb21tYW5kIHJld3JpdGluZyB2aWEgYGNyZWF0ZUJhc2hUb29sYCkgY29tYmluZWQgd2l0aCB0b29sX2NhbGwgYmxvY2tlcnMuIEhhcyBgYmxvY2tlcnMvYCwgYHJld3JpdGVycy9gLCBgY29tbWFuZHMvYCwgYHV0aWxzL2AgZGlyZWN0b3JpZXMuXG4tIGBleHRlbnNpb25zL3Byb2Nlc3Nlcy9gIGluIHRoaXMgcmVwbzogTXVsdGktYWN0aW9uIHRvb2wgd2l0aCBTdHJpbmdFbnVtIHBhcmFtZXRlcnMuXG5cbiMjIENyaXRpY2FsIFJ1bGVzXG5cbjEuICoqRXhlY3V0ZSBwYXJhbWV0ZXIgb3JkZXIqKjogYCh0b29sQ2FsbElkLCBwYXJhbXMsIHNpZ25hbCwgb25VcGRhdGUsIGN0eClgLiBTaWduYWwgYmVmb3JlIG9uVXBkYXRlLlxuMi4gKipBbHdheXMgdXNlIGBvblVwZGF0ZT8uKClgKio6IE9wdGlvbmFsIGNoYWluaW5nLiBUaGUgcGFyYW1ldGVyIGNhbiBiZSBgdW5kZWZpbmVkYC5cbjMuICoqTm8gYC5qc2AgaW4gaW1wb3J0cyoqOiBVc2UgYmFyZSBtb2R1bGUgcGF0aHMgKGAuL3Rvb2xzL215LXRvb2xgLCBub3QgYC4vdG9vbHMvbXktdG9vbC5qc2ApLlxuNC4gKipNb2RlIGF3YXJlbmVzcyoqOiBFdmVyeSBgY3R4LnVpLmN1c3RvbSgpYCBjYWxsIG5lZWRzIGFuIFJQQyBmYWxsYmFjayAodXNlIGBzZWxlY3RgL2Bjb25maXJtYC9gbm90aWZ5YCAtLSB0aGV5IHdvcmsgaW4gUlBDKS4gRXZlcnkgYHRvb2xfY2FsbGAgaG9vayB3aXRoIGRpYWxvZ3MgbmVlZHMgYSBgY3R4Lmhhc1VJYCBjaGVjay5cbjUuICoqQVBJIGtleSBnYXRpbmcqKjogQ2hlY2sgYmVmb3JlIHJlZ2lzdGVyaW5nIHRvb2xzIHRoYXQgcmVxdWlyZSB0aGUga2V5LiBQcm92aWRlcnMgaGFuZGxlIG1pc3Npbmcga2V5cyBpbnRlcm5hbGx5IHZpYSB0aGVpciBgbW9kZWxzKClgIGZ1bmN0aW9uLlxuNi4gKipUb29sIG5hbWluZyoqOiBQcmVmaXggd2l0aCBBUEkgbmFtZSBmb3IgdGhpcmQtcGFydHkgaW50ZWdyYXRpb25zIChgbGlua3VwX3dlYl9zZWFyY2hgKS4gTm8gcHJlZml4IGZvciBpbnRlcm5hbCB0b29scyAoYGdldF9jdXJyZW50X3RpbWVgKS5cbjcuICoqVG9vbCBjYWxsIGhlYWRlciBwYXR0ZXJuKio6IEtlZXAgYHJlbmRlckNhbGxgIGNvbnNpc3RlbnQ6IGZpcnN0IGxpbmUgYFtUb29sIE5hbWVdOiBbQWN0aW9uXSBbTWFpbiBhcmddIFtPcHRpb24gYXJnc11gLCBleHRyYSBsaW5lcyBmb3IgbG9uZyBhcmdzLiBVc2UgZGlzcGxheSBuYW1lcywgbm90IHJhdyB0b29sIElEcy5cbjguICoqTG9uZyBhcmdzIHBsYWNlbWVudCoqOiBQdXQgbG9uZyBwcm9tcHQvdGFzay9xdWVzdGlvbi9jb250ZXh0IHN0cmluZ3Mgb24gZm9sbG93aW5nIGxpbmVzLiBLZWVwIGZpcnN0IGxpbmUgc2Nhbm5hYmxlLlxuOS4gKipGb290ZXIgc3BhY2luZyoqOiBJZiBhIHRvb2wgcmVzdWx0IGhhcyBhIGZvb3Rlciwga2VlcCBvbmUgYmxhbmsgbGluZSBiZWZvcmUgaXQgZm9yIHJlYWRhYmlsaXR5LlxuMTAuICoqcGVlckRlcGVuZGVuY2llcyoqOiBVc2UgYD49Q1VSUkVOVF9WRVJTSU9OYCByYW5nZSwgbm90IGAqYC5cbjExLiAqKkNoZWNrIGV4aXN0aW5nIGNvbXBvbmVudHMqKjogQmVmb3JlIGNyZWF0aW5nIGEgbmV3IFRVSSBjb21wb25lbnQsIGNoZWNrIGlmIGBwaS10dWlgIG9yIGBwaS1jb2RpbmctYWdlbnRgIGFscmVhZHkgZXhwb3J0cyBvbmUgdGhhdCBmaXRzLlxuMTIuICoqTmV2ZXIgdXNlIGBob21lZGlyKClgIGZvciBwaSBwYXRocyoqOiBVc2UgdGhlIFNESyBoZWxwZXJzIGZyb20gYEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50YCBpbnN0ZWFkLiBUaGV5IHJlc3BlY3QgdGhlIGBQSV9DT0RJTkdfQUdFTlRfRElSYCBlbnYgdmFyIHdoaWNoIGlzIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGN1c3RvbSBzZXR1cHMuIEtleSBmdW5jdGlvbnM6IGBnZXRBZ2VudERpcigpYCwgYGdldFNldHRpbmdzUGF0aCgpYCwgYGdldFNlc3Npb25zRGlyKClgLCBgZ2V0UHJvbXB0c0RpcigpYCwgYGdldFRvb2xzRGlyKClgLCBgZ2V0Q3VzdG9tVGhlbWVzRGlyKClgLCBgZ2V0TW9kZWxzUGF0aCgpYCwgYGdldEF1dGhQYXRoKClgLCBgZ2V0QmluRGlyKClgLCBgZ2V0RGVidWdMb2dQYXRoKClgLiBBbGwgZXhwb3J0ZWQgZnJvbSB0aGUgbWFpbiBwYWNrYWdlIGVudHJ5IHBvaW50LlxuXG4jIyBDaGVja2xpc3RcblxuQmVmb3JlIGNvbnNpZGVyaW5nIGFuIGV4dGVuc2lvbiBjb21wbGV0ZTpcblxuLSBbIF0gRW50cnkgcG9pbnQgaGFzIGNvcnJlY3QgZGVmYXVsdCBleHBvcnQgc2lnbmF0dXJlLlxuLSBbIF0gQWxsIHRvb2xzIGhhdmUgY29ycmVjdCBleGVjdXRlIHBhcmFtZXRlciBvcmRlci5cbi0gWyBdIEFsbCBgb25VcGRhdGVgIGNhbGxzIHVzZSBvcHRpb25hbCBjaGFpbmluZy5cbi0gWyBdIE5vIGAuanNgIGZpbGUgZXh0ZW5zaW9ucyBpbiBpbXBvcnRzLlxuLSBbIF0gYHJlbmRlckNhbGxgIHVzZXMgYSBjb25zaXN0ZW50IGZpcnN0LWxpbmUgcGF0dGVybiAodG9vbCwgYWN0aW9uIGlmIGFueSwgbWFpbiBhcmcsIG9wdGlvbnMpLlxuLSBbIF0gTG9uZyBjYWxsIGFyZ3VtZW50cyBhcmUgbW92ZWQgdG8gZm9sbG93LXVwIGxpbmVzLCBub3QgY3JhbW1lZCBpbnRvIGZpcnN0IGxpbmUuXG4tIFsgXSBJZiByZXN1bHQgaW5jbHVkZXMgYSBmb290ZXIsIHRoZXJlIGlzIGEgYmxhbmsgbGluZSBhYm92ZSBpdC5cbi0gWyBdIGBjdHgudWkuY3VzdG9tKClgIGNhbGxzIGhhdmUgUlBDIGZhbGxiYWNrICh1bmRlZmluZWQgY2hlY2spLlxuLSBbIF0gYHRvb2xfY2FsbGAgaG9va3MgY2hlY2sgYGN0eC5oYXNVSWAgYmVmb3JlIGRpYWxvZyBtZXRob2RzLlxuLSBbIF0gRmlyZS1hbmQtZm9yZ2V0IG1ldGhvZHMgKG5vdGlmeSwgc2V0U3RhdHVzLCBldGMuKSBhcmUgdXNlZCB3aXRob3V0IGhhc1VJIGd1YXJkcy5cbi0gWyBdIE1pc3NpbmcgQVBJIGtleXMgcHJvZHVjZSBhIG5vdGlmaWNhdGlvbiwgbm90IGEgY3Jhc2guXG4tIFsgXSBgcG5wbSB0eXBlY2hlY2tgIHBhc3Nlcy5cbi0gWyBdIE5vIGBob21lZGlyKClgIGNhbGxzIGZvciBwaSBwYXRocyAtLSB1c2VzIFNESyBoZWxwZXJzIChgZ2V0QWdlbnREaXIoKWAsIGV0Yy4pLlxuLSBbIF0gUkVBRE1FIGRvY3VtZW50cyB0b29scywgY29tbWFuZHMsIGVudiB2YXJzLlxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MDQ4MTcwfX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoc2NvdXQpIn0sImlkIjoiMjZmOGNmODIiLCJwYXJlbnRJZCI6IjU4NWMzNTU2IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MDo0OC4xOTdaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMTliY2JkN2QiLCJwYXJlbnRJZCI6IjI2ZjhjZjgyIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MDo0OC4yMDRaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVNvbU1hOWU2TXBDWGRSQm5rZloyNmQiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJpbXBvcnQgdHlwZSB7IEV4dGVuc2lvbkFQSSB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGk6IEV4dGVuc2lvbkFQSSk6IHZvaWQge1xuICBwaS5yZWdpc3RlclByb3ZpZGVyKFwib3BlbnJvdXRlclwiLCB7XG4gICAgYmFzZVVybDogXCJodHRwOi8vYWkudGV0cmEtYWxiYWNvcmUudHMubmV0L3YxXCIsXG4gICAgYXBpS2V5OiBcIi1cIixcbiAgfSk7XG59XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcwNDgxOTV9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIyZTA3NWM0MiIsInBhcmVudElkIjoiMTliY2JkN2QiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUxOjE2LjM5MVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxR0hQajJYeVpNb1VLNFE4QTVQRndpaSIsInRvb2xOYW1lIjoic2NvdXQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJQZXJmZWN0ISBJJ3ZlIGZldGNoZWQgdGhlIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiBvbiBUYWlsc2NhbGUgQXBlcnR1cmUuIEhlcmUncyBhIGRldGFpbGVkIGJyZWFrZG93biBvZiB5b3VyIHF1ZXN0aW9uczpcblxuIyMgV2hhdCBpcyBUYWlsc2NhbGUgQXBlcnR1cmU/XG5cbioqVGFpbHNjYWxlIEFwZXJ0dXJlKiogaXMgYSBtYW5hZ2VkIEFJIGdhdGV3YXkgc2VydmljZSB0aGF0IHByb3ZpZGVzIGNlbnRyYWxpemVkIG1vbml0b3JpbmcsIHNlY3VyaXR5LCBhbmQgY29udHJvbCBvdmVyIExMTSAoTGFyZ2UgTGFuZ3VhZ2UgTW9kZWwpIHVzYWdlIHdpdGhpbiBhbiBvcmdhbml6YXRpb24uIEl0IGFkZHJlc3NlcyBjaGFsbGVuZ2VzIG9yZ2FuaXphdGlvbnMgZmFjZSB3aGVuIGFkb3B0aW5nIEFJIHRvb2xzIGJ5IHByb3ZpZGluZzpcblxuLSAqKkNlbnRyYWxpemVkIEFQSSBrZXkgbWFuYWdlbWVudCoqIC0gUmF0aGVyIHRoYW4gZGlzdHJpYnV0aW5nIEFQSSBrZXlzIHRvIGRldmVsb3BlcnMsIEFwZXJ0dXJlIG1hbmFnZXMga2V5cyBzZXJ2ZXItc2lkZSBhbmQgaW5qZWN0cyB0aGVtIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdXNlciBpZGVudGl0eVxuLSAqKlVuaWZpZWQgaWRlbnRpdHkqKiAtIFVzZXMgVGFpbHNjYWxlJ3MgZXhpc3RpbmcgaWRlbnRpdHkgbGF5ZXIgaW5zdGVhZCBvZiByZXF1aXJpbmcgc2VwYXJhdGUgQVBJIGtleXMgb3IgYXV0aGVudGljYXRpb24gdG9rZW5zXG4tICoqQ29tcHJlaGVuc2l2ZSB2aXNpYmlsaXR5KiogLSBUcmFja3MgdG9rZW4gdXNhZ2UsIGNvc3QsIG1vZGVsIHVzYWdlLCBhbmQgYWRvcHRpb24gcGF0dGVybnMgYWNyb3NzIHRoZSBvcmdhbml6YXRpb25cbi0gKipDb21wbGlhbmNlIGFuZCBhdWRpdCB0cmFpbHMqKiAtIENhcHR1cmVzIGZ1bGwgcmVxdWVzdC9yZXNwb25zZSBkYXRhIGZvciBhdWRpdCBwdXJwb3Nlc1xuXG4qKlN0YXR1cyoqOiBDdXJyZW50bHkgaW4gYWxwaGEgYW5kIGF2YWlsYWJsZSBhdCBubyBhZGRpdGlvbmFsIGNvc3QgYWNyb3NzIGFsbCBUYWlsc2NhbGUgcGxhbnMuIEFjY2VzcyBpdCBhdCBbYXBlcnR1cmUudGFpbHNjYWxlLmNvbV0oaHR0cHM6Ly9hcGVydHVyZS50YWlsc2NhbGUuY29tKS5cblxuLS0tXG5cbiMjIEhvdyBEb2VzIEl0IFdvcms/XG5cbkFwZXJ0dXJlIG9wZXJhdGVzIG9uIGZvdXIgY29yZSBtZWNoYW5pc21zOlxuXG4jIyMgMS4gKipJZGVudGl0eSB0aHJvdWdoIFRhaWxzY2FsZSoqXG4tIEV2ZXJ5IGNvbm5lY3Rpb24gY2FycmllcyBjcnlwdG9ncmFwaGljIHByb29mIG9mIGlkZW50aXR5IGZyb20gdGhlIHRhaWxuZXRcbi0gV2hlbiBhIHJlcXVlc3QgYXJyaXZlcywgQXBlcnR1cmUgcXVlcmllcyBUYWlsc2NhbGUgd2l0aCB0aGUgcmVtb3RlIElQIGFkZHJlc3Ncbi0gVGFpbHNjYWxlIHJlc3BvbmRzIHdpdGggdGhlIHVzZXIncyBsb2dpbiBuYW1lLCBkZXZpY2UgSUQsIGFuZCBhc3NpZ25lZCB0YWdzXG4tIFRoaXMgaWRlbnRpdHkgaXMgdHJ1c3R3b3J0aHkgYmVjYXVzZSBpdCBjb21lcyBmcm9tIFRhaWxzY2FsZSdzIGNvbnRyb2wgcGxhbmUsIG5vdCB0aGUgY2xpZW50XG5cbiMjIyAyLiAqKlJlcXVlc3QgUm91dGluZyBieSBNb2RlbCoqXG4tIEFwZXJ0dXJlIGV4dHJhY3RzIHRoZSBtb2RlbCBuYW1lIGZyb20gcmVxdWVzdCBib2RpZXMgKGUuZy4sIGBjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRgIG9yIGBncHQtNG9gKVxuLSBUaGUgcHJveHkgbG9va3MgdXAgd2hpY2ggcHJvdmlkZXIgc2VydmVzIHRoYXQgbW9kZWxcbi0gRm9yd2FyZHMgdGhlIHJlcXVlc3QgdG8gdGhhdCBwcm92aWRlcidzIEFQSSBlbmRwb2ludCB3aXRoIGNvcnJlY3QgYXV0aGVudGljYXRpb24gaGVhZGVycyBpbmplY3RlZFxuLSBGcm9tIHRoZSBjbGllbnQncyBwZXJzcGVjdGl2ZSwgQXBlcnR1cmUgYXBwZWFycyBhcyB0aGUgTExNIHByb3ZpZGVyIGl0c2VsZlxuXG4qKlN1cHBvcnRlZCBBUEkgZm9ybWF0cyoqOlxuLSBPcGVuQUkgQ2hhdCAoYFBPU1QgL3YxL2NoYXQvY29tcGxldGlvbnNgKVxuLSBPcGVuQUkgUmVzcG9uc2VzIChgUE9TVCAvdjEvcmVzcG9uc2VzYClcbi0gQW50aHJvcGljIE1lc3NhZ2VzIChgUE9TVCAvdjEvbWVzc2FnZXNgKVxuLSBHZW1pbmkgKGBQT1NUIC92MWJldGEvbW9kZWxzL3ttb2RlbH06Z2VuZXJhdGVDb250ZW50YClcblxuIyMjIDMuICoqVGVsZW1ldHJ5IENhcHR1cmUqKlxuLSBSZWNvcmRzIEhUVFAgbWV0aG9kLCBwYXRoLCBoZWFkZXJzIChzZW5zaXRpdmUgdmFsdWVzIHJlZGFjdGVkKSwgYW5kIHJlcXVlc3QvcmVzcG9uc2UgYm9kaWVzXG4tIEV4dHJhY3RzIG1ldHJpY3M6IHRva2VuIGNvdW50cyAoaW5wdXQsIG91dHB1dCwgY2FjaGVkLCByZWFzb25pbmcpLCBtb2RlbCBuYW1lLCByZXF1ZXN0IGR1cmF0aW9uLCB0b29sIHVzZSBjb3VudFxuLSBIYW5kbGVzIGNvbXByZXNzaW9uIChnemlwLCBkZWZsYXRlLCBicm90bGkpIGFuZCBzdHJlYW1pbmcgcmVzcG9uc2VzIHRyYW5zcGFyZW50bHlcbi0gUHJvY2Vzc2VzIHRlbGVtZXRyeSBhc3luY2hyb25vdXNseSB0byBhdm9pZCBjbGllbnQgZGVsYXlzXG5cbiMjIyA0LiAqKlNlc3Npb24gVHJhY2tpbmcqKlxuLSBHcm91cHMgcmVsYXRlZCByZXF1ZXN0cyBpbnRvIHNlc3Npb25zIChlLmcuLCBhIHNpbmdsZSBDbGF1ZGUgQ29kZSBkZWJ1Z2dpbmcgc2Vzc2lvbiBtaWdodCBnZW5lcmF0ZSA1MCsgcmVxdWVzdHMpXG4tIERldGVjdHMgc2Vzc2lvbiBJRHMgZnJvbSBkaWZmZXJlbnQgY2xpZW50IHR5cGVzOlxuICAtICoqQ2xhdWRlIENvZGUqKjogU2Vzc2lvbiBJRCBpbiByZXF1ZXN0IGJvZHlcbiAgLSAqKk9wZW5BSSBDb2RleCoqOiBTZXNzaW9uIElEIGFzIEhUVFAgaGVhZGVyXG4gIC0gKipPcGVuQUkgQ2hhdCoqOiBGaW5nZXJwcmludCBnZW5lcmF0ZWQgZnJvbSBjb252ZXJzYXRpb24gY29udGVudFxuICAtICoqT3RoZXIgY2xpZW50cyoqOiBSYW5kb20gaWRlbnRpZmllciBhc3NpZ25lZFxuXG4tLS1cblxuIyMgU3VwcG9ydGVkIFByb3ZpZGVyc1xuXG5BcGVydHVyZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIExMTSBwcm92aWRlcnM6XG5cbjEuICoqT3BlbkFJKiogLSBHUFQtNG8sIG8xLCBvMy1taW5pLCBhbmQgb3RoZXIgbW9kZWxzXG4yLiAqKkFudGhyb3BpYyoqIC0gQ2xhdWRlIFNvbm5ldCwgQ2xhdWRlIE9wdXMsIGFuZCBvdGhlciBtb2RlbHNcbjMuICoqR29vZ2xlKiogLSBHZW1pbmkgbW9kZWxzXG40LiAqKk9wZW5Sb3V0ZXIqKiAtIEFjY2VzcyB0byBvcGVuIHNvdXJjZSBtb2RlbHMgbGlrZSBEZWVwU2VlaywgUXdlbiwgYW5kIG90aGVyc1xuNS4gKipPcGVuQUktY29tcGF0aWJsZSBBUElzKiogLSBTZWxmLWhvc3RlZCBlbmRwb2ludHMgbGlrZSBsbGFtYS5jcHBcbjYuICoqQW1hem9uIEJlZHJvY2sqKiAtIENhbiBwcm94eSB0aHJvdWdoIEFwZXJ0dXJlICh3aXRoIENsYXVkZSBDb2RlKVxuNy4gKipHb29nbGUgVmVydGV4IEFJKiogLSBDYW4gcHJveHkgdGhyb3VnaCBBcGVydHVyZSAod2l0aCBDbGF1ZGUgQ29kZSlcblxuKipTdXBwb3J0ZWQgY2xpZW50cyBpbmNsdWRlKio6XG4tIENsYXVkZSBDb2RlXG4tIENvZGV4XG4tIEdlbWluaSBDTElcbi0gUm9vIENvZGVcbi0gQ2xpbmVcbi0gQ3VzdG9tIGFwcGxpY2F0aW9ucyB1c2luZyBzdXBwb3J0ZWQgcHJvdmlkZXIgQVBJc1xuXG4tLS1cblxuIyMgSG93IHRvIENvbmZpZ3VyZSBBcGVydHVyZVxuXG4jIyMgU3RlcCAxOiBBY2Nlc3MgdGhlIENvbmZpZ3VyYXRpb24gSW50ZXJmYWNlXG5cbjEuIFZpc2l0IHRoZSBBcGVydHVyZSB3ZWIgaW50ZXJmYWNlIGF0IGBodHRwOi8vYWkvdWlgIChvciB5b3VyIGNvbmZpZ3VyZWQgaG9zdG5hbWUpXG4yLiBOYXZpZ2F0ZSB0byB0aGUgKipTZXR0aW5ncyoqIHBhZ2VcblxuIyMjIFN0ZXAgMjogQ29uZmlndXJlIFByb3ZpZGVycyBhbmQgTW9kZWxzXG5cbkNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBKU09OIGZvcm1hdC4gSGVyZSdzIGEgbWluaW1hbCBleGFtcGxlOlxuXG5gYGBqc29uXG57XG4gIFwicHJvdmlkZXJzXCI6IHtcbiAgICBcImFudGhyb3BpY1wiOiB7XG4gICAgICBcImJhc2V1cmxcIjogXCJodHRwczovL2FwaS5hbnRocm9waWMuY29tXCIsXG4gICAgICBcIm1vZGVsc1wiOiBbXG4gICAgICAgIFwiY2xhdWRlLXNvbm5ldC00LTVcIixcbiAgICAgICAgXCJjbGF1ZGUtb3B1cy00LTVcIlxuICAgICAgXSxcbiAgICAgIFwiYXV0aG9yaXphdGlvblwiOiBcIngtYXBpLWtleVwiLFxuICAgICAgXCJjb21wYXRpYmlsaXR5XCI6IHtcbiAgICAgICAgXCJhbnRocm9waWNfbWVzc2FnZXNcIjogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuYGBgXG5cbkZvciBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbnMsIHJlZmVyIHRvIHRoZSBbQXBlcnR1cmUgY29uZmlndXJhdGlvbiByZWZlcmVuY2VdKGh0dHBzOi8vdGFpbHNjYWxlLmNvbS9kb2NzL2ZlYXR1cmVzL2FwZXJ0dXJlL2NvbmZpZ3VyYXRpb24pLlxuXG4jIyMgU3RlcCAzOiBHcmFudCBVc2VyIEFjY2Vzc1xuXG5Nb2RpZnkgeW91ciBUYWlsc2NhbGUgYWNjZXNzIGNvbnRyb2wgcnVsZXMgdG8gcGVybWl0IHVzZXJzIHRvIGNvbm5lY3QgdG8gdGhlIEFwZXJ0dXJlIGluc3RhbmNlOlxuXG5gYGBqc29uXG57XG4gIFwiZ3JvdXBzXCI6IFtcbiAgICBcImdyb3VwOmFpLXVzZXJzXCI6IFtcbiAgICAgIFwiZGF2ZUBleGFtcGxlLmNvbVwiLFxuICAgICAgXCJhbGljZUBleGFtcGxlLmNvbVwiXG4gICAgXVxuICBdLFxuICBcImhvc3RcIjogW1xuICAgIFwiYWlcIjogXCI8WU9VUl9BUEVSVFVSRV9JUF9BRERSRVNTPlwiXG4gIF0sXG4gIFwiZ3JhbnRzXCI6IFtcbiAgICB7XG4gICAgICBcInNyY1wiOiBbXCJncm91cDphaS11c2Vyc1wiXSxcbiAgICAgIFwiZHN0XCI6IFtcImFpXCJdLFxuICAgICAgXCJpcFwiOiBbXCJ0Y3A6ODBcIiwgXCJ0Y3A6NDQzXCIsIFwiaWNtcDoqXCJdXG4gICAgfVxuICBdXG59XG5gYGBcblxuIyMjIFN0ZXAgNDogQ29uZmlndXJlIExMTSBDbGllbnRzXG5cbioqRm9yIENsYXVkZSBDb2RlKiogKH4vLmNsYXVkZS9zZXR0aW5ncy5qc29uKTpcbmBgYGpzb25cbntcbiAgXCJhcGlLZXlIZWxwZXJcIjogXCJlY2hvICctJ1wiLFxuICBcImVudlwiOiB7XG4gICAgXCJBTlRIUk9QSUNfQkFTRV9VUkxcIjogXCJodHRwOi8vYWlcIlxuICB9XG59XG5gYGBcblxuKipGb3IgQ29kZXgqKiAofi8uY29kZXgvY29uZmlnLnRvbWwpOlxuYGBgdG9tbFxubW9kZWwgPSBcImdwdC01LjItY29kZXhcIlxubW9kZWxfcHJvdmlkZXIgPSBcImxsbS1haS10cy1uZXRcIlxuXG5bbW9kZWxfcHJvdmlkZXJzLmxsbS1haS10cy1uZXRdXG5uYW1lID0gXCJUYWlsc2NhbGUgQUkgR2F0ZXdheVwiXG5iYXNlX3VybCA9IFwiaHR0cDovL2FpL3YxXCJcbndpcmVfYXBpID0gXCJyZXNwb25zZXNcIlxuYGBgXG5cbioqRm9yIE90aGVyIENsaWVudHMqKjpcbi0gU2V0IEFQSSBCYXNlIFVSTCB0bzogYGh0dHA6Ly9haWAgKG9yIHlvdXIgaG9zdG5hbWUpXG4tIExlYXZlIEFQSSBLZXkgZW1wdHkgKEFwZXJ0dXJlIGlnbm9yZXMgY2xpZW50LXByb3ZpZGVkIGtleXMpXG5cbiMjIyBTdGVwIDU6IFRlc3QgQ29uZmlndXJhdGlvblxuXG5UZXN0IHdpdGggY3VybCBjb21tYW5kcyBmcm9tIGEgZGV2aWNlIGluIHRoZSB0YWlsbmV0OlxuXG5gYGBiYXNoXG4jIFRlc3QgQW50aHJvcGljIEFQSVxuY3VybCAtcyBodHRwOi8vYWkvdjEvbWVzc2FnZXMgXFxcbiAgLUggXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cIiBcXFxuICAtZCAne1xuICAgIFwibW9kZWxcIjogXCJjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxXCIsXG4gICAgXCJtYXhfdG9rZW5zXCI6IDI1LFxuICAgIFwibWVzc2FnZXNcIjogW3tcInJvbGVcIjogXCJ1c2VyXCIsIFwiY29udGVudFwiOiBcInJlc3BvbmQgd2l0aDogaGVsbG9cIn1dXG4gIH0nXG5cbiMgVGVzdCBPcGVuQUkgQVBJXG5jdXJsIC1zIGh0dHA6Ly9haS92MS9jaGF0L2NvbXBsZXRpb25zIFxcXG4gIC1IIFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIgXFxcbiAgLWQgJ3tcbiAgICBcIm1vZGVsXCI6IFwiZ3B0LTRvXCIsXG4gICAgXCJtZXNzYWdlc1wiOiBbe1wicm9sZVwiOiBcInVzZXJcIiwgXCJjb250ZW50XCI6IFwicmVzcG9uZCB3aXRoOiBoZWxsb1wifV1cbiAgfSdcbmBgYFxuXG4jIyMgSW1wb3J0YW50IENvbmZpZ3VyYXRpb24gTm90ZXM6XG5cbi0gKipVc2UgSFRUUCwgbm90IEhUVFBTKiogZm9yIEFwZXJ0dXJlIFVSTHMgKGUuZy4sIGBodHRwOi8vYWlgIGluc3RlYWQgb2YgYGh0dHBzOi8vYWlgKS4gQWxsIGNvbm5lY3Rpb25zIHJlbWFpbiBlbmNyeXB0ZWQgdmlhIFdpcmVHdWFyZFxuLSBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaWYgeW91IGRvbid0IHNwZWNpZnkgb25lXG4tIEFkbWluaXN0cmF0b3JzIGNhbiB2aWV3IG90aGVyIHVzZXJzJyBkYXNoYm9hcmRzIGF0IGAvdWkvZGFzaGJvYXJkLzpsb2dpbk5hbWVgXG4tIEFsbCBzZXNzaW9ucyBhcHBlYXIgdW5kZXIgaW5kaXZpZHVhbCB1c2VyIGlkZW50aXRpZXMgd2hlbiB1c2luZyBwcm9wZXIgcGVyLXVzZXIgYXV0aGVudGljYXRpb24gKG5vdCB0YWctYmFzZWQgaWRlbnRpdGllcylcblxuLS0tXG5cbioqU291cmNlKio6IGh0dHBzOi8vdGFpbHNjYWxlLmNvbS9kb2NzL2ZlYXR1cmVzL2FwZXJ0dXJlIn1dLCJkZXRhaWxzIjp7Il9yZW5kZXJLZXkiOiJ0b29sdV8wMUdIUGoyWHlaTW9VSzRROEE1UEZ3aWkiLCJ1cmwiOiJodHRwczovL3RhaWxzY2FsZS5jb20vZG9jcy9mZWF0dXJlcy9hcGVydHVyZSIsInByb21wdCI6IldoYXQgaXMgVGFpbHNjYWxlIEFwZXJ0dXJlPyBIb3cgZG9lcyBpdCB3b3JrPyBXaGF0IHByb3ZpZGVycyBkb2VzIGl0IHN1cHBvcnQ/IEhvdyBkbyB5b3UgY29uZmlndXJlIGl0PyIsInNraWxsc1Jlc29sdmVkIjowLCJ0b29sQ2FsbHMiOlt7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxTkFHbXluWmYzc2JLSjNMOGRIeFJFMyIsInRvb2xOYW1lIjoibGlua3VwX3dlYl9mZXRjaCIsImFyZ3MiOnsidXJsIjoiaHR0cHM6Ly90YWlsc2NhbGUuY29tL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzA1MDU4MywicGFydGlhbFJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJGZXRjaGluZyBodHRwczovL3RhaWxzY2FsZS5jb20vZG9jcy9mZWF0dXJlcy9hcGVydHVyZS4uLiJ9XSwiZGV0YWlscyI6e319LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiTW9uaXRvciBhbmQgc2VjdXJlIExMTSB1c2FnZSB3aXRoIEFwZXJ0dXJlIGJ5IFRhaWxzY2FsZS5cblxuUHJvZHVjdFxuXG5NZWV0IFRhaWxzY2FsZVxuXG4tICAgW0hvdyBpdCB3b3Jrc10oL2Jsb2cvaG93LXRhaWxzY2FsZS13b3Jrcylcbi0gICBbV2h5IFRhaWxzY2FsZV0oL3doeS10YWlsc2NhbGUpXG4tICAgW1dpcmVHdWFyZMKuIGZvciBFbnRlcnByaXNlc10oL3dpcmVndWFyZC12cG4pXG4tICAgW0JyaW5nIFRhaWxzY2FsZSB0byBXb3JrXSgvYnJpbmctdGFpbHNjYWxlLXRvLXdvcmspXG5cbkV4cGxvcmVcblxuLSAgIFtJbnRlZ3JhdGlvbnNdKC9pbnRlZ3JhdGlvbnMpXG4tICAgW0ZlYXR1cmVzXSgvZmVhdHVyZXMpXG4tICAgW0NvbXBhcmUgVGFpbHNjYWxlXSgvY29tcGFyZSlcbi0gICBbQ29tbXVuaXR5IFByb2plY3RzXSgvY29tbXVuaXR5L2NvbW11bml0eS1wcm9qZWN0cylcbi0gICBbUGFydG5lcnNoaXBzXSgvcGFydG5lcnNoaXBzKVxuXG5Tb2x1dGlvbnNcblxuQnkgdXNlLWNhc2VcblxuLSAgIFtCdXNpbmVzcyBWUE5dKC91c2UtY2FzZXMvYnVzaW5lc3MtdnBuKVxuLSAgIFtDSS9DRF0oL3VzZS1jYXNlcy9jaS1jZClcbi0gICBbSW5mcmEgQWNjZXNzXSgvdXNlLWNhc2VzL2luZnJhc3RydWN0dXJlLWFjY2Vzcylcbi0gICBbQ2xvdWQgQ29ubmVjdGl2aXR5XSgvdXNlLWNhc2VzL2Nsb3VkLWNvbm5lY3Rpdml0eSlcbi0gICBbWmVybyBUcnVzdCBOZXR3b3JraW5nXSgvdXNlLWNhc2VzL3plcm8tdHJ1c3QtbmV0d29ya2luZylcbi0gICBbSG9tZWxhYl0oL3VzZS1jYXNlcy9ob21lbGFiKVxuLSAgIFtTZWN1cmluZyBBSV0oL3VzZS1jYXNlcy9zZWN1cmluZy1haSlcblxuQnkgcm9sZVxuXG4tICAgW0Rldk9wc10oL3NvbHV0aW9ucy9kZXZvcHMpXG4tICAgW0lUXSgvc29sdXRpb25zL2l0KVxuLSAgIFtTZWN1cml0eV0oL3NvbHV0aW9ucy9zZWN1cml0eSlcblxuW0VudGVycHJpc2VdKC9lbnRlcnByaXNlKVxuXG5bQ3VzdG9tZXJzXSgvY3VzdG9tZXJzKVxuXG5OYXYgaGVhZGluZyBoZXJlXG5cbi0gICBbIVtBbHQgdGV4dF0oaHR0cHM6Ly9jZG4uc2FuaXR5LmlvL2ltYWdlcy93NzdpN204eC9wcm9kdWN0aW9uL2EwNmRjNjEyYjFlM2U0ZjRkZjUzYTcyMDMwMDAyNjAwNjM5YTg3MzgtMzAweDEyMC5wbmc/dz02NDAmcT03NSZmaXQ9Y2xpcCZhdXRvPWZvcm1hdClcbiAgICBcbiAgICBUaXRsZSBoZXJlXG4gICAgXG4gICAgSG93IENyaWJsIEVuYWJsZXMgU2VjdXJlIFdvcmsgRnJvbSBBbnl3aGVyZSB3aXRoIFRhaWxzY2FsZV0oaHR0cHM6Ly90YWlsc2NhbGUuY29tL2N1c3RvbWVycylcblxuW0RvY3NdKC9kb2NzKVxuXG5bQmxvZ10oL2Jsb2cpXG5cbltQcmljaW5nXSgvcHJpY2luZylcblxuW0Rvd25sb2FkXSgvZG93bmxvYWQpXG5cbltTY2hlZHVsZSBhIGRlbW9dKC9jb250YWN0L3NhbGVzKVxuXG5bR2V0IHN0YXJ0ZWQgLSBpdCdzIGZyZWUhXShodHRwczovL2xvZ2luLnRhaWxzY2FsZS5jb20vc3RhcnQpW0xvZyBpbl0oaHR0cHM6Ly9sb2dpbi50YWlsc2NhbGUuY29tL3dlbGNvbWUpXG5cbjxodHRwczovL3R3aXR0ZXIuY29tL3RhaWxzY2FsZT48aHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3RhaWxzY2FsZS8+PGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3RhaWxzY2FsZT48aHR0cHM6Ly93d3cueW91dHViZS5jb20vQFRhaWxzY2FsZT5cblxuwqkgMjAyNlxuXG4tICAgVG9nZ2xlW1N0YXJ0XSgvZG9jcy9pbnN0YWxsL3N0YXJ0KVxuXG5bUXVpY2tzdGFydF0oL2RvY3MvaG93LXRvL3F1aWNrc3RhcnQpLSAgIFRvZ2dsZVtJbnN0YWxsIFRhaWxzY2FsZV0oL2RvY3MvaW5zdGFsbClcbi0gICBUb2dnbGVbUXVpY2sgZ3VpZGVzXSgvZG9jcy9xdWljay1ndWlkZXMpXG5bT3BlblZQTiBtaWdyYXRpb24gZ3VpZGVdKC9kb2NzL3NvbHV0aW9ucy9taWdyYXRlLW9wZW52cG4tdGFpbHNjYWxlKVtMZWdhY3kgVlBOIG1pZ3JhdGlvbiBndWlkZV0oL2RvY3Mvc29sdXRpb25zL21pZ3JhdGUtbGVnYWN5LXZwbi10YWlsc2NhbGUpLSAgIFRvZ2dsZVtTZXQgdXAgYW4gaWRlbnRpdHkgcHJvdmlkZXJdKC9kb2NzL2ludGVncmF0aW9ucy9pZGVudGl0eSlcbltXaGF0IGlzIFRhaWxzY2FsZT9dKC9kb2NzL2NvbmNlcHRzL3doYXQtaXMtdGFpbHNjYWxlKVxuXG4tICAgVG9nZ2xlW01hbmFnZSBBY2Nlc3NdKC9kb2NzL21hbmFnZSlcblxuLSAgIFRvZ2dsZVtNYW5hZ2UgYWNjZXNzIGNvbnRyb2xdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sKVxuLSAgIFRvZ2dsZVtNYW5hZ2UganVzdC1pbi10aW1lIGFjY2Vzc10oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wvanVzdC1pbi10aW1lLWFjY2Vzcylcbi0gICBUb2dnbGVbTWFuYWdlIGRldmljZXNdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2RldmljZS1tYW5hZ2VtZW50KVxuLSAgIFRvZ2dsZVtNYW5hZ2UgdXNlcnNdKC9kb2NzL21hbmFnZS11c2VycylcbltUYWlsbmV0IExvY2tdKC9kb2NzL2ZlYXR1cmVzL3RhaWxuZXQtbG9jaylcblxuLSAgIFRvZ2dsZVtSb3V0ZSBUcmFmZmljXSgvZG9jcy9yb3V0ZSlcblxuLSAgIFRvZ2dsZVtTZXQgdXAgYSBzdWJuZXQgcm91dGVyXSgvZG9jcy9mZWF0dXJlcy9zdWJuZXQtcm91dGVycylcbi0gICBUb2dnbGVbU2V0IHVwIGFuIGV4aXQgbm9kZV0oL2RvY3MvZmVhdHVyZXMvZXhpdC1ub2Rlcylcbi0gICBUb2dnbGVbU2V0IHVwIGFuIGFwcCBjb25uZWN0b3JdKC9kb2NzL2ZlYXR1cmVzL2FwcC1jb25uZWN0b3JzL2hvdy10by9zZXR1cClcbi0gICBUb2dnbGVbVXNlIEROU10oL2RvY3MvcmVmZXJlbmNlL2Rucy1pbi10YWlsc2NhbGUpXG5bU2V0IHVwIE1hZ2ljRE5TXSgvZG9jcy9mZWF0dXJlcy9tYWdpY2RucylbU2V0IHVwIGhpZ2ggYXZhaWxhYmlsaXR5XSgvZG9jcy9ob3ctdG8vc2V0LXVwLWhpZ2gtYXZhaWxhYmlsaXR5KVxuXG4tICAgVG9nZ2xlW1NldCBVcCBTZXJ2ZXJzXSgvZG9jcy9zZXJ2ZXJzKVxuXG5bU2V0IHVwIGEgc2VydmVyXSgvZG9jcy9ob3ctdG8vc2V0LXVwLXNlcnZlcnMpW1VzZSB0YWdzXSgvZG9jcy9mZWF0dXJlcy90YWdzKVtJbnN0YWxsIFRhaWxzY2FsZSB3aXRoIGNsb3VkLWluaXRdKC9kb2NzL2luc3RhbGwvd2l0aC1jbG91ZC1pbml0KVtVc2UgYXV0aCBrZXlzXSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbC9hdXRoLWtleXMpW0F1dG9tYXRlIGtleSBleHBpcnldKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2tleS1leHBpcnkpLSAgIFRvZ2dsZVtVc2UgVGFpbHNjYWxlIFNTSF0oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLXNzaClcbltTZXQgdXAgSFRUUFMgY2VydGlmaWNhdGVzXSgvZG9jcy9ob3ctdG8vc2V0LXVwLWh0dHBzLWNlcnRpZmljYXRlcylbUnVuIGFuIGVwaGVtZXJhbCBub2RlXSgvZG9jcy9mZWF0dXJlcy9lcGhlbWVyYWwtbm9kZXMpW1J1biB1bmF0dGVuZGVkXSgvZG9jcy9ob3ctdG8vcnVuLXVuYXR0ZW5kZWQpXG5cbi0gICBUb2dnbGVbQWNjZXNzICYgU2hhcmUgU2VydmljZXNdKC9kb2NzL3NoYXJlKVxuXG5bVGFpbHNjYWxlIHNlcnZpY2VzXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtc2VydmljZXMpW0VuZHBvaW50IGNvbGxlY3Rpb25dKC9kb2NzL2ZlYXR1cmVzL3NlcnZpY2VzKVtTaGFyZSBub2Rlc10oL2RvY3MvZmVhdHVyZXMvc2hhcmluZyktICAgVG9nZ2xlW1VzZSBUYWlsZHJvcF0oL2RvY3MvZmVhdHVyZXMvdGFpbGRyb3ApXG5cbi0gICBUb2dnbGVbU2hhcmUgYSB3ZWIgc2VydmVyXSgvZG9jcy9zaGFyZS13ZWItc2VydmVyKVxuXG4tICAgVG9nZ2xlW1RhaWxzY2FsZSBGdW5uZWxdKC9kb2NzL2ZlYXR1cmVzL3RhaWxzY2FsZS1mdW5uZWwpXG4tICAgVG9nZ2xlW1RhaWxzY2FsZSBTZXJ2ZV0oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLXNlcnZlKVxuXG4tICAgVG9nZ2xlW1NvbHV0aW9uc10oL2RvY3Mvc29sdXRpb25zKVxuXG5bU2VjdXJlIHRyYWZmaWMgd2l0aCBBcHBsZSBUVl0oL2RvY3Mvc29sdXRpb25zL3NlY3VyZS10cmFmZmljLXB1YmxpYy13aWZpLWFwcGxldHYpW1NlY3VyZSBHaXRIdWIgQWN0aW9ucyBydW5uZXJzXSgvZG9jcy9zb2x1dGlvbnMvY29ubmVjdC1naXRodWItQ0lDRC13b3JrZmxvd3MtdG8tcHJpdmF0ZS1pbmZyYXN0cnVjdHVyZS13aXRob3V0LXB1YmxpYy1leHBvc3VyZSlbQmxvY2sgYWRzIHdpdGggYSBSYXNwYmVycnkgUGldKC9kb2NzL3NvbHV0aW9ucy9ibG9jay1hZHMtYWxsLWRldmljZXMtYW55d2hlcmUtdXNpbmctcmFzcGJlcnJ5LXBpKVtBY2Nlc3MgcmVtb3RlIGRlc2t0b3BzIHdpdGggV2luZG93cyBSRFBdKC9kb2NzL3NvbHV0aW9ucy9hY2Nlc3MtcmVtb3RlLWRlc2t0b3BzLXVzaW5nLXdpbmRvd3MtcmRwKVtBY2Nlc3MgcmVtb3RlIGRlc2t0b3BzIHdpdGggUnVzdERlc2tdKC9kb2NzL3NvbHV0aW9ucy9hY2Nlc3MtcmVtb3RlLWRlc2t0b3BzLXdpdGgtcnVzdGRlc2spW0Nvbm5lY3QgdG8gTW9uZ29EQiBBdGxhc10oL2RvY3Mvc29sdXRpb25zL2NyZWF0ZS1hLXNlY3VyZS1jb25uZWN0aW9uLXRvLW1vbmdvZGItYXRsYXMpW0NvZGUgZnJvbSB5b3VyIGlQYWRdKC9kb2NzL3NvbHV0aW9ucy9jb2RlLW9uLWlwYWQtdnNjb2RlLWNhZGR5LWNvZGUtc2VydmVyKVtMb2NrIGRvd24gYSBzZXJ2ZXJdKC9kb2NzL2hvdy10by9zZWN1cmUtdWJ1bnR1LXNlcnZlci13aXRoLXVmdylbUHJvdGVjdCBwcm9kdWN0aW9uIGRhdGFiYXNlc10oL2RvY3Mvc29sdXRpb25zL3Byb3RlY3QtcG9zdGdyZXNxbC11bmVuY3J5cHRlZC1tYWNib29rcylbQWNjZXNzIGEgUGlLVk1dKC9kb2NzL2ludGVncmF0aW9ucy9waWt2bSlbU2VjdXJlIGV4dGVybmFsIHNlcnZpY2VzXSgvZG9jcy9jb25jZXB0cy9pcC1ibG9ja2xpc3QtcmVsYXlzKS0gICBUb2dnbGVbSnVzdC1pbi10aW1lIGFjY2Vzc10oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wvanVzdC1pbi10aW1lLWFjY2Vzcylcbi0gICBUb2dnbGVbQXV0b21hdGlvbl0oL2RvY3MvYXV0b21hdGlvbnMpXG5cbi0gICBUb2dnbGVbSW50ZWdyYXRpb25zXSgvZG9jcy9pbnRlZ3JhdGlvbnMpXG5cbi0gICBUb2dnbGVbQ2xvdWQgc2VydmVyc10oL2RvY3MvY2xvdWQtc2VydmVyKVxuLSAgIFRvZ2dsZVtDb250YWluZXJzIGFuZCB2aXJ0dWFsaXphdGlvbl0oL2RvY3MvY29udGFpbmVycy1hbmQtdmlydHVhbGl6YXRpb24pXG4tICAgVG9nZ2xlW1NlcnZlcmxlc3MgYXBwc10oL2RvY3MvaW50ZWdyYXRpb24tc2VydmVybGVzcy1hcHBzKVxuLSAgIFRvZ2dsZVtEYXRhYmFzZXNdKC9kb2NzL2RhdGFiYXNlKVxuLSAgIFRvZ2dsZVtSZW1vdGUgZW52aXJvbm1lbnRzXSgvZG9jcy9yZW1vdGUtY29kZSlcbi0gICBUb2dnbGVbRGV2ZWxvcGVyIHRvb2xzXSgvZG9jcy9pbnRlZ3JhdGlvbi1kZXYtdG9vbHMpXG4tICAgVG9nZ2xlW0ZpcmV3YWxsc10oL2RvY3MvZmlyZXdhbGwpXG4tICAgVG9nZ2xlW1dlYiBzZXJ2ZXJzXSgvZG9jcy9pbnRlZ3JhdGlvbnMvd2ViLXNlcnZlcnMpXG4tICAgVG9nZ2xlW05BU10oL2RvY3MvaW50ZWdyYXRpb25zL25hcylcblxuW0ZBUV0oL2RvY3MvcmVmZXJlbmNlL2ZhcSktICAgVG9nZ2xlW0xvZ2dpbmcsIFN0cmVhbWluZywgYW5kIEV2ZW50c10oL2RvY3MvcmVmZXJlbmNlL2xvZ2dpbmctc3RyZWFtaW5nLWV2ZW50cylcblxuW0xvZ2dpbmcgb3ZlcnZpZXddKC9kb2NzL2ZlYXR1cmVzL2xvZ2dpbmcpW0NvbmZpZ3VyYXRpb24gYXVkaXQgbG9nZ2luZ10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZy9hdWRpdC1sb2dnaW5nKVtOZXR3b3JrIGZsb3cgbG9nc10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZy9uZXR3b3JrLWZsb3ctbG9ncylbTG9nIHN0cmVhbWluZ10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZy9sb2ctc3RyZWFtaW5nKS0gICBUb2dnbGVbU1NIIHNlc3Npb24gcmVjb3JkaW5nXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtc3NoL3RhaWxzY2FsZS1zc2gtc2Vzc2lvbi1yZWNvcmRpbmcpXG5bQ2xpZW50IG1ldHJpY3NdKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtY2xpZW50LW1ldHJpY3MpW1dlYmhvb2tzXSgvZG9jcy9mZWF0dXJlcy93ZWJob29rcylcblxuLSAgIFRvZ2dsZVtNYW5hZ2UgWW91ciBPcmdhbml6YXRpb25dKC9kb2NzL2FjY291bnQpXG5cbltDb250YWN0IHByZWZlcmVuY2VzXSgvZG9jcy9yZWZlcmVuY2UvY29udGFjdC1wcmVmZXJlbmNlcyktICAgVG9nZ2xlW1ByaWNpbmcgYW5kIGJpbGxpbmddKC9kb2NzL2FjY291bnQvYmlsbGluZylcbltUYWlsbmV0IG5hbWVdKC9kb2NzL2NvbmNlcHRzL3RhaWxuZXQtbmFtZSlbRG9tYWluIG93bmVyc2hpcF0oL2RvY3MvY29uY2VwdHMvZG9tYWluLW93bmVyc2hpcClcblxuLSAgIFRvZ2dsZVtSZWZlcmVuY2VdKC9kb2NzL3JlZmVyZW5jZSlcblxuLSAgIFRvZ2dsZVtUYWlsbmV0IHBvbGljeSBmaWxlIHN5bnRheF0oL2RvY3MvcmVmZXJlbmNlL3N5bnRheC9wb2xpY3ktZmlsZSlcbltBQ0wgZXhhbXBsZXNdKC9kb2NzL3JlZmVyZW5jZS9leGFtcGxlcy9hY2xzKVtHcmFudCBleGFtcGxlc10oL2RvY3MvcmVmZXJlbmNlL2V4YW1wbGVzL2dyYW50cyktICAgVG9nZ2xlW0NMSV0oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1jbGkpXG4tICAgVG9nZ2xlW0FQSV0oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1hcGkpXG5bS2V5IHByZWZpeGVzXSgvZG9jcy9yZWZlcmVuY2Uva2V5LXByZWZpeGVzKS0gICBUb2dnbGVbUHJvZHVjdGlvbiBiZXN0IHByYWN0aWNlc10oL2RvY3MvcmVmZXJlbmNlL2Jlc3QtcHJhY3RpY2VzL3Byb2R1Y3Rpb24pXG5bU2hhcmVkIHJlc3BvbnNpYmlsaXR5XSgvZG9jcy9jb25jZXB0cy9zaGFyZWQtcmVzcG9uc2liaWxpdHkpLSAgIFRvZ2dsZVtUZWNobmljYWwgb3ZlcnZpZXdzXSgvZG9jcy9jb25jZXB0cylcbi0gICBUb2dnbGVbVGVybWlub2xvZ3kgYW5kIGNvbmNlcHRzXSgvZG9jcy9yZWZlcmVuY2UvZ2xvc3NhcnkpXG5bVGFpbHNjYWxlIG1lc3NhZ2VzXSgvZG9jcy9yZWZlcmVuY2UvbWVzc2FnZXMpW0dpdEh1YiDihpddKGh0dHBzOi8vZ2l0aHViLmNvbS90YWlsc2NhbGUvdGFpbHNjYWxlKVxuXG4tICAgVG9nZ2xlW0dldCBTdXBwb3J0XSgvZG9jcy9zdXBwb3J0KVxuXG4tICAgVG9nZ2xlW1Ryb3VibGVzaG9vdGluZ10oL2RvY3MvcmVmZXJlbmNlL3Ryb3VibGVzaG9vdGluZylcbltTdXBwb3J0IG9wdGlvbnNdKC9kb2NzL3JlZmVyZW5jZS9zdXBwb3J0LW9wdGlvbnMpW0NvbnRhY3Qgc3VwcG9ydCDihpddKC9jb250YWN0L3N1cHBvcnQpW0dlbmVyYXRlIGEgYnVnIHJlcG9ydF0oL2RvY3MvYWNjb3VudC9idWctcmVwb3J0KVxuXG4tICAgVG9nZ2xlW1Jlc291cmNlc10oL2RvY3MvcmVzb3VyY2VzKVxuXG5bQ2hhbmdlbG9nIOKGl10oL2NoYW5nZWxvZylbQ29tcGFyaXNvbnMg4oaXXSgvY29tcGFyZSlbUmVsZWFzZSBzdGFnZXNdKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtcmVsZWFzZS1zdGFnZXMpW1NlY3VyaXR5IOKGl10oL3NlY3VyaXR5KVtUYWlsc2NhbGUgQ29tbXVuaXR5IFByb2plY3RzXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWNvbW11bml0eS1wcm9qZWN0cyktICAgVG9nZ2xlW1ZlcnNpb25zXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWNsaWVudC12ZXJzaW9ucylcbltVc2UgY2FzZXNdKC9kb2NzL3VzZS1jYXNlcylbSW52aXRlIG9ubHkgZmVhdHVyZXNdKC9kb2NzL3JlZmVyZW5jZS9pbnZpdGUtb25seS1mZWF0dXJlKVtGZWVkYmFjayDihpddKC9mZWVkYmFjaylcblxuMS4gIFtEb2NzXSgvZG9jcynigLpcbjIuICBGZWF0dXJlc+KAulxuMy4gIEFwZXJ0dXJlIGJ5IFRhaWxzY2FsZVxuXG4jIyMgRG9jdW1lbnRhdGlvblxuXG5DbG9zZSBuYXZpZ2F0aW9uXG5cbi0gICBUb2dnbGVbU3RhcnRdKC9kb2NzL2luc3RhbGwvc3RhcnQpXG5cbltRdWlja3N0YXJ0XSgvZG9jcy9ob3ctdG8vcXVpY2tzdGFydCktICAgVG9nZ2xlW0luc3RhbGwgVGFpbHNjYWxlXSgvZG9jcy9pbnN0YWxsKVxuLSAgIFRvZ2dsZVtRdWljayBndWlkZXNdKC9kb2NzL3F1aWNrLWd1aWRlcylcbltPcGVuVlBOIG1pZ3JhdGlvbiBndWlkZV0oL2RvY3Mvc29sdXRpb25zL21pZ3JhdGUtb3BlbnZwbi10YWlsc2NhbGUpW0xlZ2FjeSBWUE4gbWlncmF0aW9uIGd1aWRlXSgvZG9jcy9zb2x1dGlvbnMvbWlncmF0ZS1sZWdhY3ktdnBuLXRhaWxzY2FsZSktICAgVG9nZ2xlW1NldCB1cCBhbiBpZGVudGl0eSBwcm92aWRlcl0oL2RvY3MvaW50ZWdyYXRpb25zL2lkZW50aXR5KVxuW1doYXQgaXMgVGFpbHNjYWxlP10oL2RvY3MvY29uY2VwdHMvd2hhdC1pcy10YWlsc2NhbGUpXG5cbi0gICBUb2dnbGVbTWFuYWdlIEFjY2Vzc10oL2RvY3MvbWFuYWdlKVxuXG4tICAgVG9nZ2xlW01hbmFnZSBhY2Nlc3MgY29udHJvbF0oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wpXG4tICAgVG9nZ2xlW01hbmFnZSBqdXN0LWluLXRpbWUgYWNjZXNzXSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbC9qdXN0LWluLXRpbWUtYWNjZXNzKVxuLSAgIFRvZ2dsZVtNYW5hZ2UgZGV2aWNlc10oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wvZGV2aWNlLW1hbmFnZW1lbnQpXG4tICAgVG9nZ2xlW01hbmFnZSB1c2Vyc10oL2RvY3MvbWFuYWdlLXVzZXJzKVxuW1RhaWxuZXQgTG9ja10oL2RvY3MvZmVhdHVyZXMvdGFpbG5ldC1sb2NrKVxuXG4tICAgVG9nZ2xlW1JvdXRlIFRyYWZmaWNdKC9kb2NzL3JvdXRlKVxuXG4tICAgVG9nZ2xlW1NldCB1cCBhIHN1Ym5ldCByb3V0ZXJdKC9kb2NzL2ZlYXR1cmVzL3N1Ym5ldC1yb3V0ZXJzKVxuLSAgIFRvZ2dsZVtTZXQgdXAgYW4gZXhpdCBub2RlXSgvZG9jcy9mZWF0dXJlcy9leGl0LW5vZGVzKVxuLSAgIFRvZ2dsZVtTZXQgdXAgYW4gYXBwIGNvbm5lY3Rvcl0oL2RvY3MvZmVhdHVyZXMvYXBwLWNvbm5lY3RvcnMvaG93LXRvL3NldHVwKVxuLSAgIFRvZ2dsZVtVc2UgRE5TXSgvZG9jcy9yZWZlcmVuY2UvZG5zLWluLXRhaWxzY2FsZSlcbltTZXQgdXAgTWFnaWNETlNdKC9kb2NzL2ZlYXR1cmVzL21hZ2ljZG5zKVtTZXQgdXAgaGlnaCBhdmFpbGFiaWxpdHldKC9kb2NzL2hvdy10by9zZXQtdXAtaGlnaC1hdmFpbGFiaWxpdHkpXG5cbi0gICBUb2dnbGVbU2V0IFVwIFNlcnZlcnNdKC9kb2NzL3NlcnZlcnMpXG5cbltTZXQgdXAgYSBzZXJ2ZXJdKC9kb2NzL2hvdy10by9zZXQtdXAtc2VydmVycylbVXNlIHRhZ3NdKC9kb2NzL2ZlYXR1cmVzL3RhZ3MpW0luc3RhbGwgVGFpbHNjYWxlIHdpdGggY2xvdWQtaW5pdF0oL2RvY3MvaW5zdGFsbC93aXRoLWNsb3VkLWluaXQpW1VzZSBhdXRoIGtleXNdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2F1dGgta2V5cylbQXV0b21hdGUga2V5IGV4cGlyeV0oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wva2V5LWV4cGlyeSktICAgVG9nZ2xlW1VzZSBUYWlsc2NhbGUgU1NIXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtc3NoKVxuW1NldCB1cCBIVFRQUyBjZXJ0aWZpY2F0ZXNdKC9kb2NzL2hvdy10by9zZXQtdXAtaHR0cHMtY2VydGlmaWNhdGVzKVtSdW4gYW4gZXBoZW1lcmFsIG5vZGVdKC9kb2NzL2ZlYXR1cmVzL2VwaGVtZXJhbC1ub2RlcylbUnVuIHVuYXR0ZW5kZWRdKC9kb2NzL2hvdy10by9ydW4tdW5hdHRlbmRlZClcblxuLSAgIFRvZ2dsZVtBY2Nlc3MgJiBTaGFyZSBTZXJ2aWNlc10oL2RvY3Mvc2hhcmUpXG5cbltUYWlsc2NhbGUgc2VydmljZXNdKC9kb2NzL2ZlYXR1cmVzL3RhaWxzY2FsZS1zZXJ2aWNlcylbRW5kcG9pbnQgY29sbGVjdGlvbl0oL2RvY3MvZmVhdHVyZXMvc2VydmljZXMpW1NoYXJlIG5vZGVzXSgvZG9jcy9mZWF0dXJlcy9zaGFyaW5nKS0gICBUb2dnbGVbVXNlIFRhaWxkcm9wXSgvZG9jcy9mZWF0dXJlcy90YWlsZHJvcClcblxuLSAgIFRvZ2dsZVtTaGFyZSBhIHdlYiBzZXJ2ZXJdKC9kb2NzL3NoYXJlLXdlYi1zZXJ2ZXIpXG5cbi0gICBUb2dnbGVbVGFpbHNjYWxlIEZ1bm5lbF0oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLWZ1bm5lbClcbi0gICBUb2dnbGVbVGFpbHNjYWxlIFNlcnZlXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtc2VydmUpXG5cbi0gICBUb2dnbGVbU29sdXRpb25zXSgvZG9jcy9zb2x1dGlvbnMpXG5cbltTZWN1cmUgdHJhZmZpYyB3aXRoIEFwcGxlIFRWXSgvZG9jcy9zb2x1dGlvbnMvc2VjdXJlLXRyYWZmaWMtcHVibGljLXdpZmktYXBwbGV0dilbU2VjdXJlIEdpdEh1YiBBY3Rpb25zIHJ1bm5lcnNdKC9kb2NzL3NvbHV0aW9ucy9jb25uZWN0LWdpdGh1Yi1DSUNELXdvcmtmbG93cy10by1wcml2YXRlLWluZnJhc3RydWN0dXJlLXdpdGhvdXQtcHVibGljLWV4cG9zdXJlKVtCbG9jayBhZHMgd2l0aCBhIFJhc3BiZXJyeSBQaV0oL2RvY3Mvc29sdXRpb25zL2Jsb2NrLWFkcy1hbGwtZGV2aWNlcy1hbnl3aGVyZS11c2luZy1yYXNwYmVycnktcGkpW0FjY2VzcyByZW1vdGUgZGVza3RvcHMgd2l0aCBXaW5kb3dzIFJEUF0oL2RvY3Mvc29sdXRpb25zL2FjY2Vzcy1yZW1vdGUtZGVza3RvcHMtdXNpbmctd2luZG93cy1yZHApW0FjY2VzcyByZW1vdGUgZGVza3RvcHMgd2l0aCBSdXN0RGVza10oL2RvY3Mvc29sdXRpb25zL2FjY2Vzcy1yZW1vdGUtZGVza3RvcHMtd2l0aC1ydXN0ZGVzaylbQ29ubmVjdCB0byBNb25nb0RCIEF0bGFzXSgvZG9jcy9zb2x1dGlvbnMvY3JlYXRlLWEtc2VjdXJlLWNvbm5lY3Rpb24tdG8tbW9uZ29kYi1hdGxhcylbQ29kZSBmcm9tIHlvdXIgaVBhZF0oL2RvY3Mvc29sdXRpb25zL2NvZGUtb24taXBhZC12c2NvZGUtY2FkZHktY29kZS1zZXJ2ZXIpW0xvY2sgZG93biBhIHNlcnZlcl0oL2RvY3MvaG93LXRvL3NlY3VyZS11YnVudHUtc2VydmVyLXdpdGgtdWZ3KVtQcm90ZWN0IHByb2R1Y3Rpb24gZGF0YWJhc2VzXSgvZG9jcy9zb2x1dGlvbnMvcHJvdGVjdC1wb3N0Z3Jlc3FsLXVuZW5jcnlwdGVkLW1hY2Jvb2tzKVtBY2Nlc3MgYSBQaUtWTV0oL2RvY3MvaW50ZWdyYXRpb25zL3Bpa3ZtKVtTZWN1cmUgZXh0ZXJuYWwgc2VydmljZXNdKC9kb2NzL2NvbmNlcHRzL2lwLWJsb2NrbGlzdC1yZWxheXMpLSAgIFRvZ2dsZVtKdXN0LWluLXRpbWUgYWNjZXNzXSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbC9qdXN0LWluLXRpbWUtYWNjZXNzKVxuLSAgIFRvZ2dsZVtBdXRvbWF0aW9uXSgvZG9jcy9hdXRvbWF0aW9ucylcblxuLSAgIFRvZ2dsZVtJbnRlZ3JhdGlvbnNdKC9kb2NzL2ludGVncmF0aW9ucylcblxuLSAgIFRvZ2dsZVtDbG91ZCBzZXJ2ZXJzXSgvZG9jcy9jbG91ZC1zZXJ2ZXIpXG4tICAgVG9nZ2xlW0NvbnRhaW5lcnMgYW5kIHZpcnR1YWxpemF0aW9uXSgvZG9jcy9jb250YWluZXJzLWFuZC12aXJ0dWFsaXphdGlvbilcbi0gICBUb2dnbGVbU2VydmVybGVzcyBhcHBzXSgvZG9jcy9pbnRlZ3JhdGlvbi1zZXJ2ZXJsZXNzLWFwcHMpXG4tICAgVG9nZ2xlW0RhdGFiYXNlc10oL2RvY3MvZGF0YWJhc2UpXG4tICAgVG9nZ2xlW1JlbW90ZSBlbnZpcm9ubWVudHNdKC9kb2NzL3JlbW90ZS1jb2RlKVxuLSAgIFRvZ2dsZVtEZXZlbG9wZXIgdG9vbHNdKC9kb2NzL2ludGVncmF0aW9uLWRldi10b29scylcbi0gICBUb2dnbGVbRmlyZXdhbGxzXSgvZG9jcy9maXJld2FsbClcbi0gICBUb2dnbGVbV2ViIHNlcnZlcnNdKC9kb2NzL2ludGVncmF0aW9ucy93ZWItc2VydmVycylcbi0gICBUb2dnbGVbTkFTXSgvZG9jcy9pbnRlZ3JhdGlvbnMvbmFzKVxuXG5bRkFRXSgvZG9jcy9yZWZlcmVuY2UvZmFxKS0gICBUb2dnbGVbTG9nZ2luZywgU3RyZWFtaW5nLCBhbmQgRXZlbnRzXSgvZG9jcy9yZWZlcmVuY2UvbG9nZ2luZy1zdHJlYW1pbmctZXZlbnRzKVxuXG5bTG9nZ2luZyBvdmVydmlld10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZylbQ29uZmlndXJhdGlvbiBhdWRpdCBsb2dnaW5nXSgvZG9jcy9mZWF0dXJlcy9sb2dnaW5nL2F1ZGl0LWxvZ2dpbmcpW05ldHdvcmsgZmxvdyBsb2dzXSgvZG9jcy9mZWF0dXJlcy9sb2dnaW5nL25ldHdvcmstZmxvdy1sb2dzKVtMb2cgc3RyZWFtaW5nXSgvZG9jcy9mZWF0dXJlcy9sb2dnaW5nL2xvZy1zdHJlYW1pbmcpLSAgIFRvZ2dsZVtTU0ggc2Vzc2lvbiByZWNvcmRpbmddKC9kb2NzL2ZlYXR1cmVzL3RhaWxzY2FsZS1zc2gvdGFpbHNjYWxlLXNzaC1zZXNzaW9uLXJlY29yZGluZylcbltDbGllbnQgbWV0cmljc10oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1jbGllbnQtbWV0cmljcylbV2ViaG9va3NdKC9kb2NzL2ZlYXR1cmVzL3dlYmhvb2tzKVxuXG4tICAgVG9nZ2xlW01hbmFnZSBZb3VyIE9yZ2FuaXphdGlvbl0oL2RvY3MvYWNjb3VudClcblxuW0NvbnRhY3QgcHJlZmVyZW5jZXNdKC9kb2NzL3JlZmVyZW5jZS9jb250YWN0LXByZWZlcmVuY2VzKS0gICBUb2dnbGVbUHJpY2luZyBhbmQgYmlsbGluZ10oL2RvY3MvYWNjb3VudC9iaWxsaW5nKVxuW1RhaWxuZXQgbmFtZV0oL2RvY3MvY29uY2VwdHMvdGFpbG5ldC1uYW1lKVtEb21haW4gb3duZXJzaGlwXSgvZG9jcy9jb25jZXB0cy9kb21haW4tb3duZXJzaGlwKVxuXG4tICAgVG9nZ2xlW1JlZmVyZW5jZV0oL2RvY3MvcmVmZXJlbmNlKVxuXG4tICAgVG9nZ2xlW1RhaWxuZXQgcG9saWN5IGZpbGUgc3ludGF4XSgvZG9jcy9yZWZlcmVuY2Uvc3ludGF4L3BvbGljeS1maWxlKVxuW0FDTCBleGFtcGxlc10oL2RvY3MvcmVmZXJlbmNlL2V4YW1wbGVzL2FjbHMpW0dyYW50IGV4YW1wbGVzXSgvZG9jcy9yZWZlcmVuY2UvZXhhbXBsZXMvZ3JhbnRzKS0gICBUb2dnbGVbQ0xJXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWNsaSlcbi0gICBUb2dnbGVbQVBJXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWFwaSlcbltLZXkgcHJlZml4ZXNdKC9kb2NzL3JlZmVyZW5jZS9rZXktcHJlZml4ZXMpLSAgIFRvZ2dsZVtQcm9kdWN0aW9uIGJlc3QgcHJhY3RpY2VzXSgvZG9jcy9yZWZlcmVuY2UvYmVzdC1wcmFjdGljZXMvcHJvZHVjdGlvbilcbltTaGFyZWQgcmVzcG9uc2liaWxpdHldKC9kb2NzL2NvbmNlcHRzL3NoYXJlZC1yZXNwb25zaWJpbGl0eSktICAgVG9nZ2xlW1RlY2huaWNhbCBvdmVydmlld3NdKC9kb2NzL2NvbmNlcHRzKVxuLSAgIFRvZ2dsZVtUZXJtaW5vbG9neSBhbmQgY29uY2VwdHNdKC9kb2NzL3JlZmVyZW5jZS9nbG9zc2FyeSlcbltUYWlsc2NhbGUgbWVzc2FnZXNdKC9kb2NzL3JlZmVyZW5jZS9tZXNzYWdlcylbR2l0SHViIOKGl10oaHR0cHM6Ly9naXRodWIuY29tL3RhaWxzY2FsZS90YWlsc2NhbGUpXG5cbi0gICBUb2dnbGVbR2V0IFN1cHBvcnRdKC9kb2NzL3N1cHBvcnQpXG5cbi0gICBUb2dnbGVbVHJvdWJsZXNob290aW5nXSgvZG9jcy9yZWZlcmVuY2UvdHJvdWJsZXNob290aW5nKVxuW1N1cHBvcnQgb3B0aW9uc10oL2RvY3MvcmVmZXJlbmNlL3N1cHBvcnQtb3B0aW9ucylbQ29udGFjdCBzdXBwb3J0IOKGl10oL2NvbnRhY3Qvc3VwcG9ydClbR2VuZXJhdGUgYSBidWcgcmVwb3J0XSgvZG9jcy9hY2NvdW50L2J1Zy1yZXBvcnQpXG5cbi0gICBUb2dnbGVbUmVzb3VyY2VzXSgvZG9jcy9yZXNvdXJjZXMpXG5cbltDaGFuZ2Vsb2cg4oaXXSgvY2hhbmdlbG9nKVtDb21wYXJpc29ucyDihpddKC9jb21wYXJlKVtSZWxlYXNlIHN0YWdlc10oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1yZWxlYXNlLXN0YWdlcylbU2VjdXJpdHkg4oaXXSgvc2VjdXJpdHkpW1RhaWxzY2FsZSBDb21tdW5pdHkgUHJvamVjdHNdKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtY29tbXVuaXR5LXByb2plY3RzKS0gICBUb2dnbGVbVmVyc2lvbnNdKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtY2xpZW50LXZlcnNpb25zKVxuW1VzZSBjYXNlc10oL2RvY3MvdXNlLWNhc2VzKVtJbnZpdGUgb25seSBmZWF0dXJlc10oL2RvY3MvcmVmZXJlbmNlL2ludml0ZS1vbmx5LWZlYXR1cmUpW0ZlZWRiYWNrIOKGl10oL2ZlZWRiYWNrKVxuXG4jIEFwZXJ0dXJlIGJ5IFRhaWxzY2FsZVxuXG5MYXN0IHZhbGlkYXRlZDogRmViIDE1LCAyMDI2XG5cbkFwZXJ0dXJlIGJ5IFRhaWxzY2FsZSBpcyBjdXJyZW50bHkgW2luIGFscGhhXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLXJlbGVhc2Utc3RhZ2VzI2FscGhhKS5cblxuRHVyaW5nIHRoZSBhbHBoYSB0ZXN0aW5nIHBlcmlvZCwgQXBlcnR1cmUgYnkgVGFpbHNjYWxlIGlzIGF2YWlsYWJsZSBhdCBubyBhZGRpdGlvbmFsIGNvc3QgYWNyb3NzIFthbGwgVGFpbHNjYWxlIHBsYW5zXSgvcHJpY2luZykuIFJlcXVlc3QgYWNjZXNzIGF0IFtgYXBlcnR1cmUudGFpbHNjYWxlLmNvbWBdKGh0dHBzOi8vYXBlcnR1cmUudGFpbHNjYWxlLmNvbSkuXG5cbkxpa2UgdGhlIFRhaWxzY2FsZSBQZXJzb25hbCBwbGFuLCBBcGVydHVyZSBieSBUYWlsc2NhbGUgY29tZXMgd2l0aCBzaW1pbGFyIHVzYWdlIGxpbWl0cyBvZiB0aHJlZSBmcmVlIHVzZXJzLiBDb250YWN0IHVzIGZvciBwcmljaW5nIGlmIHlvdSBuZWVkIG1vcmUgdGhhbiB0aHJlZSB1c2Vycy5cblxuQXMgb3JnYW5pemF0aW9ucyBhZG9wdCBBSSBhY3Jvc3MgZGV2ZWxvcG1lbnQsIGF1dG9tYXRpb24sIGFuZCBpbnRlcm5hbCB0b29scywgdGhleSBmYWNlIG5ldyBjaGFsbGVuZ2VzIGFyb3VuZCBzZWN1cml0eSwgdmlzaWJpbGl0eSwgYW5kIGNvbnRyb2wuIEFQSSBrZXlzIGFyZSBvZnRlbiBzY2F0dGVyZWQgYWNyb3NzIGRldmVsb3BlciBtYWNoaW5lcywgQ0kgc3lzdGVtcywgYW5kIGF1dG9tYXRlZCBhZ2VudHMsIGluY3JlYXNpbmcgdGhlIHJpc2sgb2YgbGVha3MgYW5kIG1ha2luZyBjcmVkZW50aWFscyBoYXJkIHRvIHJvdGF0ZSBvciBhdWRpdC4gQXQgdGhlIHNhbWUgdGltZSwgdGVhbXMgbGFjayBjbGVhciBpbnNpZ2h0IGludG8gd2hvIGlzIHVzaW5nIHdoaWNoIG1vZGVscywgaG93IGZyZXF1ZW50bHkgdGhleSBhcmUgdXNlZCwgYW5kIHdoYXQgdGhvc2UgaW50ZXJhY3Rpb25zIGNvc3QuIFRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IGZvciBzZWN1cml0eSwgcGxhdGZvcm0sIGFuZCBjb21wbGlhbmNlIHRlYW1zIHRvIHN1cHBvcnQgQUkgdXNhZ2UgYXQgc2NhbGUgd2l0aG91dCBzbG93aW5nIGRldmVsb3BlcnMgZG93bi5cblxuQXBlcnR1cmUgYnkgVGFpbHNjYWxlIGFkZHJlc3NlcyB0aGVzZSBjaGFsbGVuZ2VzIGJ5IHByb3ZpZGluZyBhIGNlbnRyYWxpemVkIEFJIGdhdGV3YXkgaW5zaWRlIGEgVGFpbHNjYWxlIG5ldHdvcmssIG9yIHRhaWxuZXQuIEluc3RlYWQgb2YgZGlzdHJpYnV0aW5nIEFQSSBrZXlzLCB1c2VycyBhbmQgYXV0b21hdGVkIGFnZW50cyBhdXRoZW50aWNhdGUgdXNpbmcgdGhlaXIgZXhpc3RpbmcgVGFpbHNjYWxlIGlkZW50aXR5LiBBcGVydHVyZSBzZWN1cmVseSBpbmplY3RzIHByb3ZpZGVyIGNyZWRlbnRpYWxzIG9uIHRoZWlyIGJlaGFsZiBhbmQgcm91dGVzIHJlcXVlc3RzIHRvIG11bHRpcGxlIHVwc3RyZWFtIExMTSBwcm92aWRlcnMgc3VjaCBhcyBPcGVuQUksIEFudGhyb3BpYywgYW5kIEdvb2dsZSwgd2l0aG91dCByZXF1aXJpbmcgY2hhbmdlcyB0byBleGlzdGluZyB0b29scyBvciB3b3JrZmxvd3MuXG5cbkJlY2F1c2UgYWxsIEFJIHJlcXVlc3RzIGZsb3cgdGhyb3VnaCBBcGVydHVyZSwgb3JnYW5pemF0aW9ucyBnYWluIGNvbnNpc3RlbnQgdmlzaWJpbGl0eSBpbnRvIEFJIHVzYWdlLiBBcGVydHVyZSBjYXB0dXJlcyB0ZWxlbWV0cnksIHRyYWNrcyBzZXNzaW9ucywgYW5kIGV4dHJhY3RzIHVzZWZ1bCBtZXRhZGF0YSBzdWNoIGFzIHRva2VuIHVzYWdlIGFuZCB0b29sIGNhbGxzLiBUaGlzIGVuYWJsZXMgYXVkaXRpbmcsIGNvc3QgYXdhcmVuZXNzLCBhbmQgb3BlcmF0aW9uYWwgaW5zaWdodCwgd2hpbGUgYWxsb3dpbmcgdGVhbXMgdG8gc2FmZWx5IGFkb3B0IEFJIHRvb2xzIGFuZCBhZ2VudHMgd2l0aCB0aGUgc2FtZSBpZGVudGl0eSwgYWNjZXNzLCBhbmQgb2JzZXJ2YWJpbGl0eSBwcmluY2lwbGVzIHRoZXkgYWxyZWFkeSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoZWlyIGluZnJhc3RydWN0dXJlLlxuXG5SZWZlciB0byB0aGUgW0FwZXJ0dXJlIGJ5IFRhaWxzY2FsZSBjb25maWd1cmF0aW9uIHJlZmVyZW5jZV0oL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUvY29uZmlndXJhdGlvbikgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGFsbCBhdmFpbGFibGUgc2V0dGluZ3MuXG5cbiMjIFtSZXF1aXJlbWVudHNdKCNyZXF1aXJlbWVudHMpXG5cbkJlZm9yZSBkZXBsb3lpbmcgQXBlcnR1cmUsIGVuc3VyZSB5b3VyIGVudmlyb25tZW50IG1lZXRzIHRoZXNlIHJlcXVpcmVtZW50cy5cblxuLSAgICoqQSBUYWlsc2NhbGUgbmV0d29yayoqXG4gICAgXG4gICAgQXBlcnR1cmUgcnVucyBleGNsdXNpdmVseSBvbiB0YWlsbmV0cy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGJlY2F1c2UgdGhlIGVudGlyZSBhdXRoZW50aWNhdGlvbiBtb2RlbCBkZXBlbmRzIG9uIFRhaWxzY2FsZSBpZGVudGl0eS5cbiAgICBcbiAgICBVc2VyIGlkZW50aXR5IGNvbWVzIGF1dG9tYXRpY2FsbHkgZnJvbSB0YWlsbmV0IG1lbWJlcnNoaXAuIFdoZW4gYSBjbGllbnQgY29ubmVjdHMgdG8gQXBlcnR1cmUsIHRoZSBwcm94eSBxdWVyaWVzIFRhaWxzY2FsZSB0byBpZGVudGlmeSB0aGUgdXNlciBieSB0aGVpciBsb2dpbiBuYW1lIGFuZCBkZXZpY2UuIFRoaXMgZW5hYmxlcyBBUEkgYWNjZXNzIHdpdGhvdXQgc2hhcmluZyBrZXlzIHdpdGggdXNlcnMgYmVjYXVzZSBBcGVydHVyZSBjZW50cmFsbHkgbWFuYWdlcyB0aGVtIGFuZCBpbmplY3RzIHRoZW0gd2hlbiBmb3J3YXJkaW5nIHJlcXVlc3RzLlxuICAgIFxuICAgIElmIHlvdXIgb3JnYW5pemF0aW9uIGRvZXMgbm90IHVzZSBUYWlsc2NhbGUsIEFwZXJ0dXJlIHdpbGwgbm90IHdvcmsgZm9yIHlvdS4gQnV0IHlvdSBjYW4gW2NvbmZpZ3VyZSBBcGVydHVyZSB0byBtb25pdG9yIGRldmljZXMgb3V0c2lkZSB0aGUgdGFpbG5ldF0oI21vbml0b3Itc2Vzc2lvbnMtb24tYS1kZXZpY2Utb3V0c2lkZS10aGUtdGFpbG5ldCkuXG4gICAgXG4tICAgKipPbmUgb3IgbW9yZSBMTE0gcHJvdmlkZXIgYWNjb3VudHMqKlxuICAgIFxuICAgIFlvdSBuZWVkIEFQSSBrZXlzIGZvciBhbnkgTExNIHByb3ZpZGVycyB0byByb3V0ZSB0aHJvdWdoIEFwZXJ0dXJlLiBBcGVydHVyZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHByb3ZpZGVyczpcbiAgICBcbiAgICAtICAgT3BlbkFJIChHUFQtNG8sIG8xLCBvMy1taW5pLCBhbmQgb3RoZXIgbW9kZWxzKVxuICAgIC0gICBBbnRocm9waWMgKENsYXVkZSBTb25uZXQsIENsYXVkZSBPcHVzLCBhbmQgb3RoZXIgbW9kZWxzKVxuICAgIC0gICBHb29nbGUgKEdlbWluaSBtb2RlbHMpXG4gICAgLSAgIE9wZW5Sb3V0ZXIgKHByb3ZpZGVzIGFjY2VzcyB0byBvcGVuIHNvdXJjZSBtb2RlbHMgc3VjaCBhcyBEZWVwU2VlaywgUXdlbiwgYW5kIG90aGVycylcbiAgICAtICAgT3BlbkFJLWNvbXBhdGlibGUgQVBJcyAoZm9yIGV4YW1wbGUsIGxsYW1hLmNwcCBhbmQgb3RoZXIgc2VsZi1ob3N0ZWQgZW5kcG9pbnRzKVxuXG4jIyBbVXNlIGNhc2VzXSgjdXNlLWNhc2VzKVxuXG5BcGVydHVyZSBhZGRyZXNzZXMgc2V2ZXJhbCBjb21tb24gY2hhbGxlbmdlcyBvcmdhbml6YXRpb25zIGZhY2Ugd2hlbiBhZG9wdGluZyBMTE0gdG9vbHMuXG5cbi0gICAqKkNlbnRyYWxpemVkIEFQSSBrZXkgbWFuYWdlbWVudCoqXG4gICAgXG4gICAgRGlzdHJpYnV0aW5nIEFQSSBrZXlzIHRvIGRldmVsb3BlcnMgY3JlYXRlcyBzZWN1cml0eSByaXNrcyBhbmQgYW4gYWRtaW5pc3RyYXRpdmUgYnVyZGVuLiBLZXlzIGdldCBjb21taXR0ZWQgdG8gcmVwb3NpdG9yaWVzLCBzaGFyZWQgaW5zZWN1cmVseSwgb3IgZm9yZ290dGVuIHdoZW4gZW1wbG95ZWVzIGxlYXZlLlxuICAgIFxuICAgIEFwZXJ0dXJlIGNlbnRyYWxpemVzIEFQSSBrZXlzIGluIHNlcnZlciBjb25maWd1cmF0aW9uLiBDbGllbnRzIGNvbm5lY3QgdGhyb3VnaCB0aGUgcHJveHkgd2l0aG91dCBuZWVkaW5nIHByb3ZpZGVyIGNyZWRlbnRpYWxzLiBVc2VyIGlkZW50aXR5IGNvbWVzIGZyb20gdGFpbG5ldCBtZW1iZXJzaGlwLlxuICAgIFxuLSAgICoqVmlzaWJpbGl0eSBpbnRvIExMTSB1c2FnZSoqXG4gICAgXG4gICAgRW5naW5lZXJpbmcgdGVhbXMgYWRvcHQgTExNLXBvd2VyZWQgdG9vbHMgd2l0aG91dCBjZW50cmFsaXplZCB0cmFja2luZy4gSW5kaXZpZHVhbCBkZXZlbG9wZXJzIHVzZSBkaWZmZXJlbnQgcHJvdmlkZXJzLCBtb2RlbHMsIGFuZCB0b29scy4gV2l0aG91dCBhZ2dyZWdhdGlvbiwgb3JnYW5pemF0aW9ucyBjYW5ub3QgYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOlxuICAgIFxuICAgIC0gICBIb3cgbWFueSB0b2tlbnMgZGlkIHdlIHVzZSBsYXN0IG1vbnRoP1xuICAgIC0gICBXaGljaCBtb2RlbHMgYXJlIHRlYW1zIHVzaW5nP1xuICAgIC0gICBXaGF0IGRvZXMgdGhlIGJyZWFrZG93biBvZiBvdXIgTExNIHNwZW5kIGxvb2sgbGlrZT9cbiAgICBcbiAgICBBcGVydHVyZSBjYXB0dXJlcyBldmVyeSByZXF1ZXN0IHdpdGggdXNlciBhdHRyaWJ1dGlvbiwgbW9kZWwgaWRlbnRpZmljYXRpb24sIGFuZCB0b2tlbiBjb3VudHMuIFRoZSBkYXNoYm9hcmQgYWdncmVnYXRlcyB0aGlzIGRhdGEgYnkgdXNlciwgbW9kZWwsIGFuZCB0aW1lIHBlcmlvZC5cbiAgICBcbi0gICAqKkFkb3B0aW9uIGFuYWx5dGljcyoqXG4gICAgXG4gICAgUGxhdGZvcm0gdGVhbXMgZGVwbG95aW5nIExMTSB0b29scyBuZWVkIHRvIHVuZGVyc3RhbmQgYWRvcHRpb24gYW5kIGFuc3dlciBxdWVzdGlvbnMgc3VjaCBhczpcbiAgICBcbiAgICAtICAgV2hpY2ggdGVhbXMgYXJlIHVzaW5nIHRoZSB0b29scz8gSG93IGZyZXF1ZW50bHk/XG4gICAgLSAgIEFyZSB0aGVyZSB1c2VycyB3aG8gdHJpZWQgYSB0b29sIG9uZSB0aW1lIGFuZCBzdG9wcGVkP1xuICAgIFxuICAgIFRoZSBhZG9wdGlvbiBkYXNoYm9hcmQgc2hvd3Mgb3JnYW5pemF0aW9uLXdpZGUgdXNhZ2UgcGF0dGVybnMsIGFjdGl2ZSB1c2VycyBvdmVyIHRpbWUsIGFuZCB1c2FnZSBkaXN0cmlidXRpb24gaGlzdG9ncmFtcy5cbiAgICBcbi0gICAqKkNvc3QgdHJhY2tpbmcqKlxuICAgIFxuICAgIExMTSBBUEkgY29zdHMgc2NhbGUgd2l0aCB0b2tlbiB1c2FnZSwgYnV0IHRyYWNraW5nIGNvbnN1bXB0aW9uIGFjcm9zcyBtdWx0aXBsZSB0b29scyBhbmQgcHJvdmlkZXJzIHJlcXVpcmVzIGFnZ3JlZ2F0aW5nIGRhdGEgZnJvbSBlYWNoIHNvdXJjZSBpbmRpdmlkdWFsbHkuIERldmVsb3BlcnMgbWlnaHQgbm90IHJlYWxpemUgaG93IG11Y2ggdGhlaXIgd29ya2Zsb3dzIGNvc3QsIGFuZCBmaW5hbmNlIHRlYW1zIGxhY2sgdGhlIGRhdGEgdG8gZm9yZWNhc3QgYnVkZ2V0cy5cbiAgICBcbiAgICBBcGVydHVyZSBleHRyYWN0cyB0b2tlbiB1c2FnZSBmcm9tIGV2ZXJ5IHJlc3BvbnNlLCBpbmNsdWRpbmcgaW5wdXQsIG91dHB1dCwgY2FjaGVkLCBhbmQgcmVhc29uaW5nIHRva2Vucy4gVGhpcyBkYXRhIGZlZWRzIGludG8gZGFzaGJvYXJkcyBhbmQgZXhwb3J0cyBmb3IgY29zdCBhbmFseXNpcy5cbiAgICBcbi0gICAqKkNvbXBsaWFuY2UgYW5kIGF1ZGl0IHRyYWlscyoqXG4gICAgXG4gICAgUmVndWxhdGVkIGluZHVzdHJpZXMgcmVxdWlyZSBhdWRpdCB0cmFpbHMgZm9yIEFJIGludGVyYWN0aW9ucy4gV2hlbiBMTE0gcmVxdWVzdHMgZmxvdyBkaXJlY3RseSBmcm9tIGNsaWVudCB0byBwcm92aWRlciwgb3JnYW5pemF0aW9ucyBoYXZlIG5vIHJlY29yZCBvZiB3aGF0IHdhcyBzZW50IG9yIHJlY2VpdmVkLlxuICAgIFxuICAgIEFwZXJ0dXJlIHN0b3JlcyBmdWxsIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGJvZGllcy4gVGhlIGNhcHR1cmUgc3lzdGVtIHByZXNlcnZlcyBoZWFkZXJzLCBwYXlsb2FkcywgYW5kIHRvb2wgdXNlIGRhdGEuIEV4cG9ydCBsb2dzIGFuZCBldmVudHMgdG8geW91ciBTSUVNIGZvciBtb25pdG9yaW5nLCByZXRlbnRpb24sIGFuZCBjb21wbGlhbmNlIHdvcmtmbG93cy4gQXBlcnR1cmUgc3VwcG9ydHMgUzMgZXhwb3J0LCB3aGljaCBpbnRlZ3JhdGVzIHdpdGggbW9zdCBzZWN1cml0eSBhbmQgY29tcGxpYW5jZSB0b29saW5nLlxuICAgIFxuLSAgICoqTExNIHNlc3Npb24gZGVidWdnaW5nKipcbiAgICBcbiAgICBZb3UgY2FuIHVzZSBBcGVydHVyZSB0byBkZWJ1ZyBMTE0gaW50ZXJhY3Rpb25zIGJ5IHJldmlld2luZyBmdWxsIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGRhdGEuIFRoZSAqKkxvZ3MqKiBwYWdlIGdyb3VwcyByZWxhdGVkIHJlcXVlc3RzIGludG8gc2Vzc2lvbnMsIGxldHRpbmcgeW91IHRyYWNlIHRoZSBmbG93IG9mIGEgY29udmVyc2F0aW9uIG9yIGNvZGluZyB0YXNrLlxuICAgIFxuXG4jIyBbSG93IGl0IHdvcmtzXSgjaG93LWl0LXdvcmtzKVxuXG5UaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGNvcmUgbWVjaGFuaXNtcyB0aGF0IHBvd2VyIEFwZXJ0dXJlLlxuXG4jIyMgW0lkZW50aXR5IHRocm91Z2ggVGFpbHNjYWxlXSgjaWRlbnRpdHktdGhyb3VnaC10YWlsc2NhbGUpXG5cblRyYWRpdGlvbmFsIEFQSSBwcm94aWVzIHJlcXVpcmUgY2xpZW50cyB0byBhdXRoZW50aWNhdGUgd2l0aCB0b2tlbnMgb3IgQVBJIGtleXMuIEFwZXJ0dXJlIGVsaW1pbmF0ZXMgdGhpcyBzdGVwIGJ5IHVzaW5nIFRhaWxzY2FsZSdzIGlkZW50aXR5IGxheWVyLlxuXG5FdmVyeSBjb25uZWN0aW9uIHRvIGEgdGFpbG5ldCBjYXJyaWVzIGNyeXB0b2dyYXBoaWMgcHJvb2Ygb2YgaWRlbnRpdHkuIFdoZW4gYSByZXF1ZXN0IGFycml2ZXMgYXQgQXBlcnR1cmUsIHRoZSBwcm94eSBxdWVyaWVzIFRhaWxzY2FsZSB3aXRoIHRoZSByZW1vdGUgSVAgYWRkcmVzcy4gVGFpbHNjYWxlIHJlc3BvbmRzIHdpdGggdGhlIHVzZXIncyBsb2dpbiBuYW1lIChmb3IgZXhhbXBsZSwgYGFsaWNlQGV4YW1wbGUuY29tYCksIGEgcGVyc2lzdGVudCBkZXZpY2UgaWRlbnRpZmllciwgYW5kIGFueSB0YWdzIGFzc2lnbmVkIHRvIHRoYXQgZGV2aWNlLlxuXG5UaGlzIGlkZW50aXR5IGlzIHRydXN0d29ydGh5IGJlY2F1c2UgaXQgY29tZXMgZnJvbSBUYWlsc2NhbGUncyBjb250cm9sIHBsYW5lLCBub3QgZnJvbSB0aGUgY2xpZW50LiBBIHVzZXIgY2Fubm90IGZvcmdlIHRoZWlyIGlkZW50aXR5IHdpdGhvdXQgY29tcHJvbWlzaW5nIFRhaWxzY2FsZSdzIGtleSBleGNoYW5nZS5cblxuVGhlIGlkZW50aXR5IGZsb3dzIHRocm91Z2ggdGhlIGVudGlyZSBzeXN0ZW0uIEV2ZXJ5IG1ldHJpYyByZWNvcmQgaW5jbHVkZXMgdGhlIGxvZ2luIG5hbWUgYW5kIGRldmljZSBJRC4gVGhlIGRhc2hib2FyZCBmaWx0ZXJzIGJ5IHVzZXIuIEFjY2VzcyBjb250cm9sIHVzZXMgcm9sZXMgZGVyaXZlZCBmcm9tIFRhaWxzY2FsZSB0YWdzLlxuXG4jIyMgW1JlcXVlc3Qgcm91dGluZyBieSBtb2RlbF0oI3JlcXVlc3Qtcm91dGluZy1ieS1tb2RlbClcblxuV2hlbiBhIHJlcXVlc3QgYXJyaXZlcywgQXBlcnR1cmUgZXh0cmFjdHMgdGhlIG1vZGVsIG5hbWUgZnJvbSB0aGUgcmVxdWVzdCBib2R5IChmb3IgZXhhbXBsZSwgYGNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNGAgb3IgYGdwdC00b2ApLiBUaGUgcHJveHkgbG9va3MgdXAgd2hpY2ggcHJvdmlkZXIgc2VydmVzIHRoYXQgbW9kZWwgYW5kIGZvcndhcmRzIHRoZSByZXF1ZXN0IHRvIHRoYXQgcHJvdmlkZXIncyBBUEkgZW5kcG9pbnQsIGluamVjdGluZyB0aGUgY29ycmVjdCBhdXRoZW50aWNhdGlvbiBoZWFkZXJzLlxuXG5Gcm9tIHRoZSBjbGllbnQncyBwZXJzcGVjdGl2ZSwgdGhlIHByb3h5IGFwcGVhcnMgYXMgaWYgaXQgd2VyZSB0aGUgTExNIHByb3ZpZGVyIGl0c2VsZi4gQ2xpZW50cyBjb25uZWN0IHRvIHRoZSBwcm94eSBVUkwgYW5kIHNlbmQgc3RhbmRhcmQgQVBJIHJlcXVlc3RzLiBUaGUgcHJveHkgaGFuZGxlcyB0aGUgcm91dGluZyB0cmFuc3BhcmVudGx5LlxuXG5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBzdXBwb3J0ZWQgQVBJIGZvcm1hdHM6XG5cbkZvcm1hdFxuXG5FbmRwb2ludFxuXG5Qcm92aWRlcnNcblxuT3BlbkFJIENoYXRcblxuYFBPU1QgL3YxL2NoYXQvY29tcGxldGlvbnNgXG5cbk9wZW5BSSwgT3BlblJvdXRlciwgbGxhbWEuY3BwXG5cbk9wZW5BSSBSZXNwb25zZXNcblxuYFBPU1QgL3YxL3Jlc3BvbnNlc2BcblxuT3BlbkFJXG5cbkFudGhyb3BpYyBNZXNzYWdlc1xuXG5gUE9TVCAvdjEvbWVzc2FnZXNgXG5cbkFudGhyb3BpY1xuXG5HZW1pbmlcblxuYFBPU1QgL3YxYmV0YS9tb2RlbHMve21vZGVsfTpnZW5lcmF0ZUNvbnRlbnRgXG5cbkdvb2dsZVxuXG5Nb3JlIHN1cHBvcnRlZCBBUEkgZm9ybWF0cyB3aWxsIGJlY29tZSBhdmFpbGFibGUgaW4gdGhlIGZ1dHVyZSwgaW5jbHVkaW5nIEFXUyBCZWRyb2NrIGFuZCBHb29nbGUgVmVydGV4LlxuXG4jIyMgW1RlbGVtZXRyeSBjYXB0dXJlXSgjdGVsZW1ldHJ5LWNhcHR1cmUpXG5cblRoZSBjYXB0dXJlIHN5c3RlbSByZWNvcmRzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlY29uc3RydWN0IGFuZCBhbmFseXplIGVhY2ggTExNIGludGVyYWN0aW9uOlxuXG4tICAgKipSZXF1ZXN0IGRhdGEqKjogSFRUUCBtZXRob2QsIHBhdGgsIGhlYWRlcnMgKHdpdGggc2Vuc2l0aXZlIHZhbHVlcyByZWRhY3RlZCksIGFuZCBmdWxsIHJlcXVlc3QgYm9keS5cbi0gICAqKlJlc3BvbnNlIGRhdGEqKjogU3RhdHVzIGNvZGUsIGhlYWRlcnMsIGFuZCBmdWxsIHJlc3BvbnNlIGJvZHkuXG4tICAgKipFeHRyYWN0ZWQgbWV0cmljcyoqOiBUb2tlbiBjb3VudHMgYnkgdHlwZSAoaW5wdXQsIG91dHB1dCwgY2FjaGVkLCBhbmQgcmVhc29uaW5nKSwgbW9kZWwgbmFtZSwgcmVxdWVzdCBkdXJhdGlvbiwgYW5kIHRvb2wgdXNlIGNvdW50LlxuLSAgICoqU2Vzc2lvbiBjb250ZXh0Kio6IFNlc3Npb24gSUQgbGlua2luZyByZWxhdGVkIHJlcXVlc3RzIHdpdGggc3VwcG9ydGVkIHByb3ZpZGVycyBhbmQgYWdlbnRzIHN1Y2ggYXMgQ2xhdWRlIENvZGUgYW5kIENvZGV4LlxuXG5UaGUgcHJveHkgcHJvY2Vzc2VzIHRlbGVtZXRyeSBhc3luY2hyb25vdXNseSBhZnRlciB0aGUgcmVzcG9uc2UgY29tcGxldGVzLCBzbyBjbGllbnRzIHJlY2VpdmUgcmVzcG9uc2VzIHdpdGhvdXQgc2lnbmlmaWNhbnQgZGVsYXkuXG5cblRoZSBwcm94eSBoYW5kbGVzIHR3byB0ZWNobmljYWwgY2hhbGxlbmdlcyB0cmFuc3BhcmVudGx5OlxuXG4tICAgKipDb21wcmVzc2lvbioqOiBUaGUgcHJveHkgZGVjb21wcmVzc2VzIHJlc3BvbnNlIGJvZGllcyB0aGF0IGFycml2ZSBjb21wcmVzc2VkIChgZ3ppcGAsIGBkZWZsYXRlYCwgb3IgYGJyb3RsaWApIGJlZm9yZSBzdG9yYWdlLlxuLSAgICoqU3RyZWFtaW5nKio6IEZvciBzdHJlYW1pbmcgcmVzcG9uc2VzIChTZXJ2ZXItU2VudCBFdmVudHMpLCB0aGUgcHJveHkgcmVjb25zdHJ1Y3RzIGEgY29tcGxldGUgcmVzcG9uc2Ugb2JqZWN0IGZyb20gdGhlIGV2ZW50IHN0cmVhbSBmb3IgY29uc2lzdGVudCBtZXRyaWMgZXh0cmFjdGlvbi5cblxuIyMjIFtTZXNzaW9uIHRyYWNraW5nXSgjc2Vzc2lvbi10cmFja2luZylcblxuQSBzaW5nbGUgY29kaW5nIHRhc2sgb3IgY29udmVyc2F0aW9uIHR5cGljYWxseSBpbnZvbHZlcyBtYW55IExMTSByZXF1ZXN0cy4gQSBkZXZlbG9wZXIgdXNpbmcgQ2xhdWRlIENvZGUgY2FuIGdlbmVyYXRlIDUwIG9yIG1vcmUgcmVxdWVzdHMgd2hpbGUgZGVidWdnaW5nIG9uZSBpc3N1ZS4gV2l0aG91dCBncm91cGluZywgdGhlc2UgYXBwZWFyIGFzIDUwIHVucmVsYXRlZCBldmVudHMuIFdpdGggc2Vzc2lvbiB0cmFja2luZywgdGhleSBmb3JtIGEgY29oZXJlbnQgdW5pdCB5b3UgY2FuIGFuYWx5emUgYXMgYSB3aG9sZS5cblxuQXBlcnR1cmUgZ3JvdXBzIHJlbGF0ZWQgcmVxdWVzdHMgaW50byBzZXNzaW9ucyBieSBkZXRlY3Rpbmcgc2Vzc2lvbiBpZGVudGlmaWVycyBmcm9tIGRpZmZlcmVudCBjbGllbnQgdHlwZXMuIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIGhvdyBlYWNoIGNsaWVudCB0eXBlIGlkZW50aWZpZXMgc2Vzc2lvbnM6XG5cbkNsaWVudCB0eXBlXG5cbkhvdyBzZXNzaW9ucyBhcmUgaWRlbnRpZmllZFxuXG5DbGF1ZGUgQ29kZVxuXG5TZXNzaW9uIElEIGluY2x1ZGVkIGluIGVhY2ggcmVxdWVzdCBib2R5XG5cbk9wZW5BSSBDb2RleFxuXG5TZXNzaW9uIElEIHNlbnQgYXMgSFRUUCBoZWFkZXJcblxuT3BlbkFJIENoYXRcblxuRmluZ2VycHJpbnQgZ2VuZXJhdGVkIGZyb20gY29udmVyc2F0aW9uIGNvbnRlbnRcblxuT3RoZXIgY2xpZW50c1xuXG5SYW5kb20gaWRlbnRpZmllciBhc3NpZ25lZFxuXG5TZXNzaW9ucyBlbmFibGUgY29udmVyc2F0aW9uLWxldmVsIGFuYWx5c2lzLiBUaGUgbG9ncyBwYWdlIGdyb3VwcyByZXF1ZXN0cyBieSBzZXNzaW9uLCBzaG93aW5nIHRoZSBmdWxsIGNvbnRleHQgb2YgYSBjb2Rpbmcgc2Vzc2lvbiBvciBjaGF0IGNvbnZlcnNhdGlvbi4gWW91IGNhbiByZXZpZXcgdG9rZW4gY29zdHMgcGVyIGNvbnZlcnNhdGlvbiByYXRoZXIgdGhhbiBwZXIgcmVxdWVzdCwgdHJhY2UgaG93IGEgY29kaW5nIGFzc2lzdGFudCBicm9rZSBkb3duIGEgdGFzaywgb3IgaWRlbnRpZnkgd2hpY2ggY29udmVyc2F0aW9uIGNvbnN1bWVkIHRoZSBtb3N0IHJlc291cmNlcy5cblxuIyMgW0dldCBzdGFydGVkXSgjZ2V0LXN0YXJ0ZWQpXG5cbkFwZXJ0dXJlIGJ5IFRhaWxzY2FsZSBpcyBhIG1hbmFnZWQgc2VydmljZSB0aGF0IFRhaWxzY2FsZSBob3N0cyBhbmQgbWFpbnRhaW5zLiBUbyBzZXQgdXAgQXBlcnR1cmUgaW4geW91ciB0YWlsbmV0LCB2aXNpdCBbYGFwZXJ0dXJlLnRhaWxzY2FsZS5jb21gXShodHRwczovL2FwZXJ0dXJlLnRhaWxzY2FsZS5jb20pLlxuXG5BZnRlciB5b3UgaGF2ZSBhY2Nlc3MgdG8gQXBlcnR1cmU6XG5cbjEuICBDb25maWd1cmUgQXBlcnR1cmUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcHJvdmlkZXJzLCBtb2RlbHMsIGFuZCBzZXR0aW5ncy5cbjIuICBHcmFudCB1c2VycyBhY2Nlc3MgdG8gQXBlcnR1cmUuXG4zLiAgU2V0IHVwIExMTSBjbGllbnRzIHRvIGRpcmVjdCB0cmFmZmljIHRocm91Z2ggdGhlIEFwZXJ0dXJlIHByb3h5LlxuNC4gIChPcHRpb25hbCkgVGVzdCB5b3VyIEFwZXJ0dXJlIGNvbmZpZ3VyYXRpb24uXG5cbiMjIyBbQ29uZmlndXJlIEFwZXJ0dXJlIHNldHRpbmdzXSgjY29uZmlndXJlLWFwZXJ0dXJlLXNldHRpbmdzKVxuXG5UbyBjb25maWd1cmUgW0FwZXJ0dXJlIHNldHRpbmdzXSgvZG9jcy9mZWF0dXJlcy9hcGVydHVyZS9jb25maWd1cmF0aW9uKSwgZ28gdG8gdGhlIEFwZXJ0dXJlIHdlYiBpbnRlcmZhY2UuIFRoZSB3ZWIgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSB0byBkZXZpY2VzIGluIHRoZSBzYW1lIHRhaWxuZXQgYXQgYGh0dHA6Ly9haS91aWAuXG5cbjEuICBPcGVuIHRoZSAqKlNldHRpbmdzKiogcGFnZSBvZiB0aGUgQXBlcnR1cmUgd2ViIGludGVyZmFjZS5cbjIuICBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBpbmNsdWRlIHRoZSBMTE0gcHJvdmlkZXJzIGFuZCBtb2RlbHMgeW91IHBsYW4gdG8gdXNlLlxuMy4gIENvbmZpZ3VyZSBhbnkgYWRkaXRpb25hbCBzZXR0aW5ncy5cblxuVGhlIGZvbGxvd2luZyBjb2RlIGJsb2NrIGNvbnRhaW5zIGEgbWluaW1hbCBjb25maWd1cmF0aW9uIGZpbGUgZXhhbXBsZSB0aGF0IHNldHMgdXAgQXBlcnR1cmUgd2l0aCBhY2Nlc3MgdG8gQW50aHJvcGljJ3MgQ2xhdWRlIFNvbm5ldCA0LjUgYW5kIENsYXVkZSBPcHVzIDQuNSBtb2RlbHMuXG5cbmBgYGpzb25cbntcbiAgXCJwcm92aWRlcnNcIjoge1xuICAgIFwiYW50aHJvcGljXCI6IHtcbiAgICAgIFwiYmFzZXVybFwiOiBcImh0dHBzOi8vYXBpLmFudGhyb3BpYy5jb21cIixcbiAgICAgIFwibW9kZWxzXCI6IFtcbiAgICAgICAgXCJjbGF1ZGUtc29ubmV0LTQtNVwiLFxuICAgICAgICBcImNsYXVkZS1vcHVzLTQtNVwiLFxuICAgICAgXSxcbiAgICAgIFwiYXV0aG9yaXphdGlvblwiOiBcIngtYXBpLWtleVwiLFxuICAgICAgXCJjb21wYXRpYmlsaXR5XCI6IHtcbiAgICAgICAgXCJhbnRocm9waWNfbWVzc2FnZXNcIjogdHJ1ZSxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmBgYFxuXG5JZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgQXBlcnR1cmUgdXNlcyBbdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbl0oL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUvY29uZmlndXJhdGlvbiNkZWZhdWx0LWNvbmZpZ3VyYXRpb24pLiBSZWZlciB0byB0aGUgW0FwZXJ0dXJlIGNvbmZpZ3VyYXRpb24gcmVmZXJlbmNlXSgvZG9jcy9mZWF0dXJlcy9hcGVydHVyZS9jb25maWd1cmF0aW9uKSBmb3IgZGV0YWlscyBvbiBhbGwgYXZhaWxhYmxlIHNldHRpbmdzLlxuXG4jIyMgW0dyYW50IHVzZXJzIGFjY2VzcyB0byBBcGVydHVyZV0oI2dyYW50LXVzZXJzLWFjY2Vzcy10by1hcGVydHVyZSlcblxuVG8gbGV0IHVzZXJzIGluIHlvdXIgdGFpbG5ldCBhY2Nlc3MgQXBlcnR1cmUsIGVuc3VyZSB5b3VyIHRhaWxuZXQgYWNjZXNzIGNvbnRyb2xzIGdyYW50IHRoZW0gYWNjZXNzIHRvIGNvbm5lY3QgdG8gdGhlIEFwZXJ0dXJlIGluc3RhbmNlLlxuXG4xLiAgTG9nIGluIHRvIHRoZSBUYWlsc2NhbGUgYWRtaW4gY29uc29sZS5cbjIuICBHbyB0byB0aGUgW0FjY2VzcyBjb250cm9sc10oaHR0cHM6Ly9sb2dpbi50YWlsc2NhbGUuY29tL2FkbWluL2FjbHMvZmlsZSkgcGFnZSBvZiB0aGUgYWRtaW4gY29uc29sZS5cbjMuICBFbnN1cmUgeW91ciBhY2Nlc3MgY29udHJvbCBydWxlcyBhbGxvdyB1c2VycyB0byBjb25uZWN0IHRvIHRoZSBBcGVydHVyZSBkZXZpY2UuXG5cbkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHJ1bGUgcGVybWl0cyBhbGwgdXNlcnMgaW4gdGhlIGdyb3VwIGBncm91cDphaS11c2Vyc2AgYWNjZXNzIHRvIHRoZSBBcGVydHVyZSBpbnN0YW5jZSB3aXRoIHRoZSBob3N0bmFtZSBgYWlgOlxuXG5gYGBqc29uXG57XG4gIC8vIERlZmluZSB0aGUgYWktdXNlcnMgZ3JvdXAgaW4gdGhlIFwiZ3JvdXBzXCIgc2VjdGlvbiBvZiB0aGUgYWNjZXNzIGNvbnRyb2wgcnVsZXMuXG4gIFwiZ3JvdXBzXCIgOiBbXG4gICAgXCJncm91cDphaS11c2Vyc1wiOiBbXG4gICAgICBcImRhdmVAZXhhbXBsZS5jb21cIixcbiAgICAgIFwiYWxpY2VAZXhhbXBsZS5jb21cIlxuICAgIF1cbiBdLFxuICAgLy8gU2V0IHRoZSBob3N0bmFtZSBvZiB5b3VyIEFwZXJ0dXJlIGluc3RhbmNlIHRvIFwiYWlcIiBpbiB0aGUgXCJob3N0c1wiIHNlY3Rpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIHJ1bGVzLlxuICBcImhvc3RcIjogW1xuICAgIFwiYWlcIjogXCI8WU9VUl9BUEVSVFVSRV9JUF9BRERSRVNTPlwiXG4gIF0sXG4gIC8vIENyZWF0ZSBhIGdyYW50IGFjY2VzcyBjb250cm9sIHJ1bGUgdGhhdCBhbGxvd3MgdXNlcnMgaW4gdGhlIFwiZ3JvdXA6YWktdXNlcnNcIiBncm91cCB0byBhY2Nlc3MgdGhlIFwiYWlcIiBob3N0IG9uIFRDUCBwb3J0cyA4MCwgNDQzLCBhbmQgYWxsIElDTVAgdHlwZXMuXG4gIFwiZ3JhbnRzXCI6IFtcbiAgICB7XG4gICAgICBcInNyY1wiOiBbXG4gICAgICAgIFwiZ3JvdXA6YWktdXNlcnNcIixcbiAgICAgICBdLFxuICAgICAgIFwiZHN0XCI6IFtcImFpXCJdLFxuICAgICAgIFwiaXBcIjogW1widGNwOjgwXCIsIFwidGNwOjQ0M1wiLCBcImljbXA6KlwiXVxuICAgIH1cbiAgXVxufVxuYGBgXG5cbkFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIFtUYWlsc2NhbGUgdGFnc10oL2RvY3MvZmVhdHVyZXMvdGFncykgdG8gbWFuYWdlIGFjY2VzcyB0byB0aGUgQXBlcnR1cmUgaW5zdGFuY2UuIEFzc2lnbiBhIHRhZyAoZm9yIGV4YW1wbGUsIGB0YWc6YWlgKSB0byB0aGUgQXBlcnR1cmUgZGV2aWNlIGFuZCBjcmVhdGUgYW4gYSBncmFudCBydWxlIHRoYXQgYWxsb3dzIHVzZXJzIGluIHRoZSBgYWktdXNlcnNgIGdyb3VwIHRvIGFjY2VzcyBgdGFnOmFpYC5cblxuIyMjIFtTZXQgdXAgTExNIGNsaWVudHMgdG8gdXNlIEFwZXJ0dXJlXSgjc2V0LXVwLWxsbS1jbGllbnRzLXRvLXVzZS1hcGVydHVyZSlcblxuVG8gYXZvaWQgdW5leHBlY3RlZCBUTFMgaXNzdWVzLCB3ZSBzdHJvbmdseSByZWNvbW1lbmQgdXNpbmcgYGh0dHA6Ly9gIGZvciB0aGUgQXBlcnR1cmUgVVJMIHdoZW4gY29uZmlndXJpbmcgTExNIGNsaWVudHMuIEZvciBleGFtcGxlLCB1c2UgYGh0dHA6Ly9haWAgaW5zdGVhZCBvZiBgaHR0cHM6Ly9haWAuIEFsbCBjb25uZWN0aW9ucyByZW1haW4gZW5jcnlwdGVkIHVzaW5nIFdpcmVHdWFyZCwgZXZlbiB3aGVuIEhUVFBTIGlzIG5vdCB1c2VkLlxuXG5BZnRlciBBcGVydHVyZSBpcyBydW5uaW5nLCBjb25maWd1cmUgeW91ciBMTE0gY2xpZW50cyB0byBzZW5kIHJlcXVlc3RzIHRocm91Z2ggdGhlIHByb3h5IHJhdGhlciB0aGFuIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlcnMuIEFwZXJ0dXJlIHdvcmtzIHdpdGggYW55IGNvZGluZyBhZ2VudCBvciBBSSB0b29sIHRoYXQgbGV0cyB5b3UgY29uZmlndXJlIGEgY3VzdG9tIGJhc2UgVVJMLlxuXG5BcGVydHVyZSB3b3JrcyB3aXRoIHRoZSBmb2xsb3dpbmcgY2xpZW50czpcblxuLSAgIENsYXVkZSBDb2RlXG4tICAgQ29kZXhcbi0gICBHZW1pbmkgQ0xJXG4tICAgUm9vIENvZGVcbi0gICBDbGluZVxuXG5JbiBnZW5lcmFsLCB0byBjb25maWd1cmUgYW4gTExNIGNsaWVudCB0byB1c2UgQXBlcnR1cmUsIHlvdSBuZWVkOlxuXG4tICAgVGhlIFVSTCBvZiB5b3VyIEFwZXJ0dXJlIHByb3h5IGluc3RhbmNlLlxuLSAgIEFjY2VzcyB0byB0aGUgTExNIGNsaWVudCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuXG5Gb3IgdGhlIEFwZXJ0dXJlIFVSTCwgeW91IGNhbiB1c2UgdGhlIEFwZXJ0dXJlIGhvc3RuYW1lIG9yIGl0cyB0YWlsbmV0IGRvbWFpbiBuYW1lLiBGb3IgZXhhbXBsZSwgaWYgeW91IHNldCB0aGUgaG9zdG5hbWUgb2YgeW91ciBBcGVydHVyZSBpbnN0YW5jZSB0byBgYWlgIGluIHlvdXIgVGFpbHNjYWxlIGFjY2VzcyBjb250cm9scywgeW91IGNhbiB1c2UgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgVVJMcyB0byBhY2Nlc3MgaXQ6XG5cbi0gICBIb3N0bmFtZTogYGh0dHA6Ly9haWBcbi0gICBGUUROOiBgaHR0cDovL2FpLnlvdXItdGFpbG5ldC50cy5uZXRgXG5cbllvdSBjYW4gY2hvb3NlIGFueSBuYW1lIGZvciB5b3VyIEFwZXJ0dXJlIGluc3RhbmNlLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgYGFpYC5cblxuVGhlIEFwZXJ0dXJlIFVSTCB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgdGhlIHByb3ZpZGVyJ3MgYmFzZSBVUkwuIEZvciBleGFtcGxlLCB0byBhY2Nlc3MgYGh0dHA6Ly9wcm92aWRlci11cmwvdjEvc29tZS1lbmRwb2ludGAsIHlvdSB3b3VsZCB1c2UgYGh0dHA6Ly9haS92MS9zb21lLWVuZHBvaW50YC5cblxuIyMjIyBbQ2xhdWRlIENvZGVdKCNjbGF1ZGUtY29kZSlcblxuVG8gY29uZmlndXJlIENsYXVkZSBDb2RlIHRvIHVzZSBBcGVydHVyZSwgY3JlYXRlIG9yIGVkaXQgdGhlIGdsb2JhbCBDbGF1ZGUgQ29kZSBzZXR0aW5ncyBmaWxlIChgfi8uY2xhdWRlL3NldHRpbmdzLmpzb25gKSB0byB1c2UgdGhlIEFwZXJ0dXJlIFVSTCBhcyB0aGUgYEFOVEhST1BJQ19CQVNFX1VSTGAuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbmNsdWRlIHNvbWUgYWRkaXRpb25hbCByZWNvbW1lbmRlZCBzZXR0aW5nczpcblxuYGBganNvblxue1xuICBcImFwaUtleUhlbHBlclwiOiBcImVjaG8gJy0nXCIsIC8vIFBsYWNlaG9sZGVyOyBBcGVydHVyZSBpbmplY3RzIGNyZWRlbnRpYWxzXG4gIFwiZW52XCI6IHtcbiAgICBcIkFOVEhST1BJQ19CQVNFX1VSTFwiOiBcImh0dHA6Ly9haVwiLCAvLyBSZXF1aXJlZDogQXBlcnR1cmUgVVJMXG4gIH1cbn1cbmBgYFxuXG5UaGUgYGFwaUtleUhlbHBlcmAgc2V0dGluZyByZXR1cm5zIGEgcGxhY2Vob2xkZXIgdmFsdWUgYmVjYXVzZSBBcGVydHVyZSBhdXRvbWF0aWNhbGx5IGluamVjdHMgY3JlZGVudGlhbHMuXG5cbkNsYXVkZSBDb2RlIGF1dG9tYXRpY2FsbHkgcm91dGVzIHJlcXVlc3RzIHRocm91Z2ggQXBlcnR1cmUuIE5vIEFQSSBrZXkgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQgb24gdGhlIGNsaWVudCBiZWNhdXNlIEFwZXJ0dXJlIGluamVjdHMgY3JlZGVudGlhbHMuXG5cbllvdSBjYW4gYWxzbyBjb25maWd1cmUgQ2xhdWRlIENvZGUgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluc3RlYWQgb2YgYSBzZXR0aW5ncyBmaWxlLiBTZXQgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6XG5cbmBgYHNoZWxsXG5leHBvcnQgQU5USFJPUElDX0JBU0VfVVJMPVwiaHR0cDovL2FpXCJcbmBgYFxuXG5DbGF1ZGUgQ29kZSB2MS54IHJlcXVpcmVzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBiZWNhdXNlIHRoZSBgYXBpS2V5SGVscGVyYCBzZXR0aW5nIGRvZXMgbm90IGV4aXN0IGluIGVhcmxpZXIgdmVyc2lvbnMuIFlvdSBtdXN0IHByb3ZpZGUgYSBwbGFjZWhvbGRlciBhdXRoZW50aWNhdGlvbiB0b2tlbiBhbmQgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBtb2RlbC5cblxuYGBgc2hlbGxcbntcbiBcIm1vZGVsXCI6IFwiY2xhdWRlLXNvbm5ldC00LTVcIiwgLy8gUmVxdWlyZWQ6IFNwZWNpZnkgYSBtb2RlbFxuIFwiZW52XCI6IHtcbiAgXCJBTlRIUk9QSUNfQVVUSF9UT0tFTlwiOiBcImJlYXJlci1tYW5hZ2VkXCIsIC8vIFJlcXVpcmVkOiBQbGFjZWhvbGRlciB0b2tlblxuICBcIkFOVEhST1BJQ19CQVNFX1VSTFwiOiBcImh0dHA6Ly9haVwiLCAvLyBSZXF1aXJlZDogQXBlcnR1cmUgVVJMXG4gfVxufVxuYGBgXG5cbiMjIyMjIFtDbGF1ZGUgQ29kZSB3aXRoIEFtYXpvbiBCZWRyb2NrXSgjY2xhdWRlLWNvZGUtd2l0aC1hbWF6b24tYmVkcm9jaylcblxuVG8gdXNlIENsYXVkZSBDb2RlIGluIHRoZSBDTEkgd2l0aCBBcGVydHVyZSB0aHJvdWdoIEFtYXpvbiBCZWRyb2NrLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIGBzZXR0aW5ncy5qc29uYDpcblxuYGBganNvblxue1xuICBcImVudlwiOiB7XG4gICAgXCJBTlRIUk9QSUNfTU9ERUxcIjogXCJjbGF1ZGUtc29ubmV0LTQtNVwiLFxuICAgIFwiQU5USFJPUElDX0JFRFJPQ0tfQkFTRV9VUkxcIjogXCJodHRwOi8vYWkvYmVkcm9ja1wiLFxuICAgIFwiQ0xBVURFX0NPREVfVVNFX0JFRFJPQ0tcIjogXCIxXCIsXG4gICAgXCJDTEFVREVfQ09ERV9TS0lQX0JFRFJPQ0tfQVVUSFwiOiBcIjFcIlxuICB9XG59XG5gYGBcblxuVG8gdXNlIENsYXVkZSBDb2RlIHdpdGggVlMgQ29kZSBhbmQgQmVkcm9jayB5b3UgbmVlZCB0byBkbyB0aGUgYWJvdmUgYW5kIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgVlMgQ29kZSB1c2VyIHNldHRpbmdzIEpTT046XG5cbjEuICBPcGVuIHRoZSAqKkNvbW1hbmQgUGFsZXR0ZSoqLlxuMi4gIFNlbGVjdCAqKlByZWZlcmVuY2VzOiBPcGVuIFVzZXIgU2V0dGluZ3MgKEpTT04pKiogKG9yICoqUHJlZmVyZW5jZXM6IE9wZW4gV29ya3NwYWNlIFNldHRpbmdzIChKU09OKSoqLCBpZiBhcHBsaWNhYmxlKS5cbjMuICBBZGQgYFwiY2xhdWRlQ29kZS5kaXNhYmxlTG9naW5Qcm9tcHRcIjogdHJ1ZWAuXG40LiAgU2F2ZSB5b3VyIGNoYW5nZXMuXG5cbiMjIyMjIFtDbGF1ZGUgQ29kZSB3aXRoIFZlcnRleCBBSV0oI2NsYXVkZS1jb2RlLXdpdGgtdmVydGV4LWFpKVxuXG5UbyB1c2UgQ2xhdWRlIENvZGUgd2l0aCBBcGVydHVyZSB0aHJvdWdoIFZlcnRleCBBSSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBgc2V0dGluZ3MuanNvbmA6XG5cbmBgYGpzb25cbntcbiAgXCJlbnZcIjoge1xuICAgIFwiQ0xPVURfTUxfUkVHSU9OXCI6IFwiZ2xvYmFsXCIsXG4gICAgXCJBTlRIUk9QSUNfVkVSVEVYX1BST0pFQ1RfSURcIjogXCJZT1VSX1BST0pFQ1RfSURcIixcbiAgICBcIkNMQVVERV9DT0RFX1VTRV9WRVJURVhcIjogXCIxXCIsXG4gICAgXCJDTEFVREVfQ09ERV9TS0lQX1ZFUlRFWF9BVVRIXCI6IFwiMVwiLFxuICAgIFwiQU5USFJPUElDX1ZFUlRFWF9CQVNFX1VSTFwiOiBcImh0dHA6Ly9haS92MVwiXG4gIH1cbn1cbmBgYFxuXG5UbyB1c2UgQ2xhdWRlIENvZGUgd2l0aCBWUyBDb2RlIGFuZCBWZXJ0ZXggeW91IG5lZWQgdG8gZG8gdGhlIGFib3ZlIGFuZCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIFZTIENvZGUgdXNlciBzZXR0aW5ncyBKU09OOlxuXG4xLiAgT3BlbiB0aGUgKipDb21tYW5kIFBhbGV0dGUqKi5cbjIuICBTZWxlY3QgKipQcmVmZXJlbmNlczogT3BlbiBVc2VyIFNldHRpbmdzIChKU09OKSoqIChvciAqKlByZWZlcmVuY2VzOiBPcGVuIFdvcmtzcGFjZSBTZXR0aW5ncyAoSlNPTikqKiwgaWYgYXBwbGljYWJsZSkuXG4zLiAgQWRkIGBcImNsYXVkZUNvZGUuZGlzYWJsZUxvZ2luUHJvbXB0XCI6IHRydWVgLlxuNC4gIFNhdmUgeW91ciBjaGFuZ2VzLlxuXG4jIyMjIFtDb2RleF0oI2NvZGV4KVxuXG5UbyBjb25maWd1cmUgQ29kZXggdG8gdXNlIEFwZXJ0dXJlLCBjcmVhdGUgb3IgZWRpdCB5b3VyIENvZGV4IGNvbmZpZ3VyYXRpb24gZmlsZSAoYH4vLmNvZGV4L2NvbmZpZy50b21sYCkgdG8gdXNlIHRoZSBBcGVydHVyZSBVUkwgYXMgdGhlIGBiYXNlX3VybGAgYW5kIHNldCB0aGUgbW9kZWwgdG8gYSBDb2RleC1jb21wYXRpYmxlIG1vZGVsLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHNldCB0aGUgYmFzZSBVUkwgYW5kIGluY2x1ZGVzIHNvbWUgYWRkaXRpb25hbCByZWNvbW1lbmRlZCBzZXR0aW5nczpcblxuYGBgbWFya3VwXG5tb2RlbCA9IFwiZ3B0LTUuMi1jb2RleFwiXG5tb2RlbF9wcm92aWRlciA9IFwibGxtLWFpLXRzLW5ldFwiXG5tb2RlbF9yZWFzb25pbmdfZWZmb3J0ID0gXCJoaWdoXCJcblxuW21vZGVsX3Byb3ZpZGVycy5sbG0tYWktdHMtbmV0XVxubmFtZSA9IFwiVGFpbHNjYWxlIEFJIEdhdGV3YXlcIlxuYmFzZV91cmwgPSBcImh0dHA6Ly9haS92MVwiICMgUmVxdWlyZWQ6IEFwZXJ0dXJlIFVSTFxuXG4jIFJlcXVpcmVkIHRvIHVzZSBcImdwdC01LWNvZGV4XCIgbW9kZWxcbndpcmVfYXBpID0gXCJyZXNwb25zZXNcIlxuYGBgXG5cblRoZSBgd2lyZV9hcGkgPSBcInJlc3BvbnNlc1wiYCBzZXR0aW5nIGNvbmZpZ3VyZXMgQ29kZXggdG8gdXNlIHRoZSBPcGVuQUkgUmVzcG9uc2VzIEFQSSBmb3JtYXQuXG5cbiMjIyMgW0dlbWluaSBDTEksIFJvbyBDb2RlLCBDbGluZSwgYW5kIG90aGVyIGNsaWVudHNdKCNnZW1pbmktY2xpLXJvby1jb2RlLWNsaW5lLWFuZC1vdGhlci1jbGllbnRzKVxuXG5Db25maWd1cmUgdGhlIGNsaWVudCB0byB1c2UgdGhlIEFwZXJ0dXJlIFVSTCBhcyB0aGUgQVBJIGJhc2UuIFVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOlxuXG4tICAgKipBUEkgQmFzZSBVUkwqKjogYGh0dHA6Ly9haWBcbi0gICAqKkFQSSBLZXkqKjogTGVhdmUgZW1wdHkgb3Igc2V0IHRvIGFueSB2YWx1ZSAoQXBlcnR1cmUgaWdub3JlcyBjbGllbnQtcHJvdmlkZWQga2V5cylcblxuIyMjIyBbQ3VzdG9tIGFwcGxpY2F0aW9uc10oI2N1c3RvbS1hcHBsaWNhdGlvbnMpXG5cbllvdSBjYW4gY29uZmlndXJlIGN1c3RvbSBhcHBsaWNhdGlvbnMgdG8gdXNlIEFwZXJ0dXJlIGFzIGxvbmcgYXMgdGhleSB1c2UgYSBzdXBwb3J0ZWQgcHJvdmlkZXIgQVBJLiBQb2ludCB5b3VyIEhUVFAgY2xpZW50IGF0IHRoZSBBcGVydHVyZSBVUkwgYW5kIHVzZSB0aGUgc3RhbmRhcmQgcHJvdmlkZXIgQVBJIGZvcm1hdC4gRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgT3BlbkFJIGNoYXQgY29tcGxldGlvbnMgQVBJOlxuXG5gYGBqc29uXG5QT1NUIGh0dHA6Ly9haS92MS9jaGF0L2NvbXBsZXRpb25zXG5Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cblxue1xuICBcIm1vZGVsXCI6IFwiZ3B0LTRvXCIsXG4gIFwibWVzc2FnZXNcIjogW3tcInJvbGVcIjogXCJ1c2VyXCIsIFwiY29udGVudFwiOiBcIkhlbGxvXCJ9XVxufVxuYGBgXG5cbkFwZXJ0dXJlIHJvdXRlcyB0aGUgcmVxdWVzdCB0byB0aGUgYXBwcm9wcmlhdGUgcHJvdmlkZXIgYmFzZWQgb24gdGhlIG1vZGVsIG5hbWUuXG5cbiMjIyBbVGVzdCB5b3VyIEFwZXJ0dXJlIGNvbmZpZ3VyYXRpb25dKCN0ZXN0LXlvdXItYXBlcnR1cmUtY29uZmlndXJhdGlvbilcblxuWW91IGNhbiB0ZXN0IHlvdXIgY29ubmVjdGlvbiB0byBBcGVydHVyZSB1c2luZyBjdXJsIGNvbW1hbmRzIGZyb20gYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSB0YWlsbmV0LiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIHNob3cgaG93IHRvIHNlbmQgdGVzdCByZXF1ZXN0cyB1c2luZyBkaWZmZXJlbnQgQVBJIGZvcm1hdHMuXG5cbioqVGVzdCBBbnRocm9waWMgQVBJIGZvcm1hdCoqOlxuXG5gYGBzaGVsbFxuY3VybCAtcyBodHRwOi8vYWkvdjEvbWVzc2FnZXMgXFxcbiAgLUggXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cIiBcXFxuICAtZCAne1xuICAgIFwibW9kZWxcIjogXCJjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxXCIsXG4gICAgXCJtYXhfdG9rZW5zXCI6IDI1LFxuICAgIFwibWVzc2FnZXNcIjogW3tcInJvbGVcIjogXCJ1c2VyXCIsIFwiY29udGVudFwiOiBcInJlc3BvbmQgd2l0aDogaGVsbG9cIn1dXG4gIH0nXG5gYGBcblxuKipUZXN0IE9wZW5BSSBBUEkgZm9ybWF0Kio6XG5cbmBgYHNoZWxsXG5jdXJsIC1zIGh0dHA6Ly9haS92MS9jaGF0L2NvbXBsZXRpb25zIFxcXG4gIC1IIFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIgXFxcbiAgLWQgJ3tcbiAgICBcIm1vZGVsXCI6IFwiZ3B0LTRvXCIsXG4gICAgXCJtZXNzYWdlc1wiOiBbe1wicm9sZVwiOiBcInVzZXJcIiwgXCJjb250ZW50XCI6IFwicmVzcG9uZCB3aXRoOiBoZWxsb1wifV1cbiAgfSdcbmBgYFxuXG4qKlRlc3QgT3BlbkFJIFJlc3BvbnNlcyBBUEkgZm9ybWF0Kio6XG5cbmBgYHNoZWxsXG5jdXJsIC1zIGh0dHA6Ly9haS92MS9yZXNwb25zZXMgXFxcbiAgLUggXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cIiBcXFxuICAtZCAne1xuICAgIFwibW9kZWxcIjogXCJncHQtNG9cIixcbiAgICBcImlucHV0XCI6IFt7XCJyb2xlXCI6IFwidXNlclwiLCBcImNvbnRlbnRcIjogXCJyZXNwb25kIHdpdGg6IGhlbGxvXCJ9XVxuICB9J1xuYGBgXG5cbklmIHRoZSByZXF1ZXN0cyBzdWNjZWVkLCBBcGVydHVyZSBpcyBjb3JyZWN0bHkgcm91dGluZyB0byB5b3VyIGNvbmZpZ3VyZWQgcHJvdmlkZXJzLiBWaXNpdCB5b3VyIEFwZXJ0dXJlIGRhc2hib2FyZCAoYGh0dHA6Ly9haS91aS9gKSB0byBhY2Nlc3MgdGhlIHJlcXVlc3RzIGluIHlvdXIgdXNhZ2UgaGlzdG9yeS5cblxuIyMgW1dlYiBkYXNoYm9hcmRdKCN3ZWItZGFzaGJvYXJkKVxuXG5Zb3UgY2FuIGFjY2VzcyB0aGUgQXBlcnR1cmUgZGFzaGJvYXJkIGF0IGAvdWkvYCBvbiB5b3VyIEFwZXJ0dXJlIGhvc3RuYW1lIChmb3IgZXhhbXBsZSwgYGh0dHA6Ly9haS91aS9gKS4gVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBlYWNoIHBhZ2UgaW4gdGhlIGRhc2hib2FyZC5cblxuIyMjIFtEYXNoYm9hcmQgcGFnZV0oI2Rhc2hib2FyZC1wYWdlKVxuXG5JZiB5b3UgaW5jb3JyZWN0bHkgYXV0aGVudGljYXRlIHVzZXIgZGV2aWNlcyB3aXRoIHRhZyBpZGVudGl0aWVzLCBhbGwgTExNIHNlc3Npb25zIGZyb20gdGhvc2UgZGV2aWNlcyBhcHBlYXIgdG8gY29tZSBmcm9tIHRoZSB0YWcgaWRlbnRpdHkgaW5zdGVhZCBvZiB0aGUgaW5kaXZpZHVhbCB1c2VyLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSBUYWlsc2NhbGUgdGFncyBkbyBub3QgcHJvdmlkZSBwZXItdXNlciBpZGVudGl0eS4gUmVmZXIgdG8gW0FsbCBzZXNzaW9ucyBhcHBlYXIgdG8gY29tZSBmcm9tIHRoZSBzYW1lIHVzZXJdKCNhbGwtc2Vzc2lvbnMtYXBwZWFyLXRvLWNvbWUtZnJvbS10aGUtc2FtZS11c2VyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuVGhlICoqRGFzaGJvYXJkKiogcGFnZSBzaG93cyB0b2tlbiB1c2FnZSBmb3IgdGhlIGN1cnJlbnQgdXNlci4gSXQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuXG4tICAgVG90YWwgdG9rZW5zIGJ5IG1vZGVsIChiYXIgY2hhcnQpXG4tICAgUmVjZW50IGFjdGl2aXR5IHRpbWVsaW5lXG4tICAgUXVpY2sgc3RhdHM6IHRvdGFsIHJlcXVlc3RzLCB0b3RhbCB0b2tlbnMsIGFjdGl2ZSBzZXNzaW9uc1xuXG5BZG1pbmlzdHJhdG9ycyBjYW4gYWNjZXNzIG90aGVyIHVzZXJzJyBkYXNoYm9hcmRzIGJ5IGdvaW5nIHRvIGAvdWkvZGFzaGJvYXJkLzpsb2dpbk5hbWVgIHdoZXJlIGBsb2dpbk5hbWVgIGlzIHRoZSBUYWlsc2NhbGUgbG9naW4gbmFtZSBvZiB0aGUgdXNlciAoZm9yIGV4YW1wbGUsIGBhbGljZWApLlxuXG4jIyMgW0xvZ3MgcGFnZV0oI2xvZ3MtcGFnZSlcblxuVGhlICoqTG9ncyoqIHBhZ2UgZGlzcGxheXMgcmVxdWVzdCBoaXN0b3J5IHdpdGggc2Vzc2lvbiBncm91cGluZy4gSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyB2aWV3czpcblxuLSAgICoqU2Vzc2lvbnMgbGlzdCoqOiBTaG93cyBhZ2dyZWdhdGVkIG1ldHJpY3MgcGVyIHNlc3Npb24gKHRvdGFsIHRva2VucywgcmVxdWVzdCBjb3VudCwgYW5kIGR1cmF0aW9uKS5cbi0gICAqKlNlc3Npb24gZXhwYW5zaW9uKio6IFNlbGVjdCBhIHNlc3Npb24gdG8gZGlzcGxheSBpdHMgaW5kaXZpZHVhbCByZXF1ZXN0cy5cbi0gICAqKlJlcXVlc3QgZGV0YWlsKio6IFNlbGVjdCBhIHJlcXVlc3QgdG8gZGlzcGxheSBmdWxsIGNhcHR1cmUgZGF0YSwgaW5jbHVkaW5nIGhlYWRlcnMsIHJlcXVlc3QgYm9keSwgcmVzcG9uc2UgYm9keSwgYW5kIHRvb2wgdXNlIGRldGFpbHMuXG4tICAgKipGaWx0ZXJpbmcqKjogRmlsdGVyIGJ5IGRhdGUgcmFuZ2UsIG1vZGVsLCBvciB1c2VyLlxuXG5TZXNzaW9uIGdyb3VwaW5nIGhlbHBzIHlvdSB1bmRlcnN0YW5kIGNvbnZlcnNhdGlvbiBjb250ZXh0LiBBIENsYXVkZSBDb2RlIHNlc3Npb24gY2FuIHNob3cgZG96ZW5zIG9mIHJlcXVlc3RzIHRoYXQgdG9nZXRoZXIgcmVwcmVzZW50IGEgc2luZ2xlIGNvZGluZyB0YXNrLlxuXG4jIyMgW1Rvb2wgVXNlIHBhZ2VdKCN0b29sLXVzZS1wYWdlKVxuXG5UaGUgKipUb29sIFVzZSoqIHBhZ2UgZGlzcGxheXMgdG9vbCBpbnZvY2F0aW9uIHBhdHRlcm5zIGFjcm9zcyBzZXNzaW9uczpcblxuLSAgIFRvb2wgdXNlIGhpc3RvZ3JhbSBvdmVyIHRpbWVcbi0gICBUb29sIHR5cGUgYnJlYWtkb3duIHBlciBzZXNzaW9uXG4tICAgRmlsdGVyIGJ5IHVzZXIsIG1vZGVsLCBvciBzcGVjaWZpYyB0b29sIG5hbWVzXG5cbiMjIyBbQWRvcHRpb24gcGFnZV0oI2Fkb3B0aW9uLXBhZ2UpXG5cblRoZSAqKkFkb3B0aW9uKiogcGFnZSBzaG93cyBvcmdhbml6YXRpb24td2lkZSBtZXRyaWNzLiBJdCBkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGRhdGE6XG5cbi0gICBBY3RpdmUgdXNlcnMgb3ZlciB0aW1lXG4tICAgVXNhZ2UgZGlzdHJpYnV0aW9uIGhpc3RvZ3JhbSAoaG93IHVzYWdlIGlzIHNwcmVhZCBhY3Jvc3MgdXNlcnMpXG4tICAgVG9wIHVzZXJzIGJ5IHRva2VuIGNvbnN1bXB0aW9uXG4tICAgTW9kZWwgcG9wdWxhcml0eSBicmVha2Rvd25cblxuVGhpcyBwYWdlIGhlbHBzIHBsYXRmb3JtIHRlYW1zIHVuZGVyc3RhbmQgTExNIGFkb3B0aW9uIHBhdHRlcm5zIGFuZCBpZGVudGlmeSB1c2VycyB3aG8gbmVlZCBzdXBwb3J0IG9yIHRyYWluaW5nLlxuXG4jIyMgW01vZGVscyBwYWdlXSgjbW9kZWxzLXBhZ2UpXG5cblRoZSAqKk1vZGVscyoqIHBhZ2UgbGlzdHMgYWxsIGNvbmZpZ3VyZWQgbW9kZWxzIHdpdGggdGhlaXIgcHJvdmlkZXIgaW5mb3JtYXRpb24uIEVhY2ggbW9kZWwgZW50cnkgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBkZXRhaWxzOlxuXG4tICAgTW9kZWwgSURcbi0gICBQcm92aWRlciBuYW1lIGFuZCBkZXNjcmlwdGlvblxuLSAgIEFQSSBjb21wYXRpYmlsaXR5ICh3aGljaCBlbmRwb2ludHMgdGhlIG1vZGVsIHN1cHBvcnRzKVxuXG5BbGwgcHJvdmlkZXJzIGFuZCBtb2RlbHMgY29uZmlndXJlZCBpbiB0aGUgQXBlcnR1cmUgc2V0dGluZ3Mgc2hvdyBvbiB0aGUgKipNb2RlbHMqKiBwYWdlLiBVc2VycyBjYW4gcmVmZXJlbmNlIHRoaXMgcGFnZSB0byBjaG9vc2Ugd2hpY2ggbW9kZWwgdG8gdXNlIHRocm91Z2ggQXBlcnR1cmUgd2hlbiBjb25maWd1cmluZyBMTE0gY2xpZW50cy5cblxuIyMjIFtTZXR0aW5ncyBwYWdlXSgjc2V0dGluZ3MtcGFnZSlcblxuVGhlICoqU2V0dGluZ3MqKiBwYWdlIGxldHMgYWRtaW5pc3RyYXRvcnMgYWNjZXNzIGFuZCBlZGl0IHRoZSBbQXBlcnR1cmUgY29uZmlndXJhdGlvbiBmaWxlXSgvZG9jcy9mZWF0dXJlcy9hcGVydHVyZS9jb25maWd1cmF0aW9uKS5cblxuIyMgW0hvdy10byBndWlkZXNdKCNob3ctdG8tZ3VpZGVzKVxuXG5TdGVwLWJ5LXN0ZXAgaW5zdHJ1Y3Rpb25zIGZvciBwZXJmb3JtaW5nIHNwZWNpZmljIHRhc2tzIGluIEFwZXJ0dXJlLlxuXG4jIyMgW0ludGVncmF0ZSBBcGVydHVyZSB3aXRoIE9zb10oI2ludGVncmF0ZS1hcGVydHVyZS13aXRoLW9zbylcblxuWW91IGNhbiBpbnRlZ3JhdGUgQXBlcnR1cmUgd2l0aCBbT3NvXShodHRwczovL3d3dy5vc29ocS5jb20vKTpcblxuMS4gIEdvIHRvIHRoZSBBcGVydHVyZSB3ZWIgaW50ZXJmYWNlIGF0IGBodHRwOi8vYWkvdWkvYC5cbjIuICBHbyB0byB0aGUgKipUb29sIFVzZSoqIHBhZ2UsIHRoZW4gc2VsZWN0ICoqVmlldyBUb29sIFVzZSBpbiBPc28qKi5cbjMuICBMb2cgaW4gdG8geW91ciBPc28gYWNjb3VudCAob3Igc2lnbiB1cCkgYW5kIGNyZWF0ZSBhbiBBUEkga2V5LiBZb3UnbGwgbmVlZCB0aGlzIGtleSB0byBjb25maWd1cmUgdGhlIGhvb2sgaW4gQXBlcnR1cmUuXG40LiAgR28gdG8gdGhlICoqU2V0dGluZ3MqKiBwYWdlIGluIHRoZSBBcGVydHVyZSB3ZWIgaW50ZXJmYWNlLlxuNS4gIEFkZCBhIGdyYW50IHRoYXQgdXNlcyB0aGUgT3NvIGhvb2sgdG8gc3BlY2lmeSB3aGF0IHRvIHNlbmQgdG8gT3NvLiBBcGVydHVyZSBvbmx5IHNlbmRzIGRhdGEgdG8gT3NvIHdoZW4gYSByZXF1ZXN0IG1hdGNoZXMgdGhlIGdyYW50IGNvbmRpdGlvbnMuXG5cbmBgYGpzb25cbi8vIE90aGVyIEFwZXJ0dXJlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuLi5cblwidGVtcF9ncmFudHNcIjogW1xuICAvLyBFeGFtcGxlIGhvb2s6IHNlbmQgdHJhZmZpYyB0byBPc28gaWYgaXQgbWF0Y2hlcyBjZXJ0YWluIHBhcmFtZXRlcnMuXG4gIC8vIFlvdSBuZWVkIHRvIGFsc28gY29uZmlndXJlIE9zbyBpbiB0aGUgXCJob29rc1wiIHNlY3Rpb24gZm9yIHRoaXMgdG8gd29yay5cbiAge1xuICAgICAgXCJzcmNcIjogW1xuICAgICAgICAgIC8vIE5vIHVzZXJzIGJ5IGRlZmF1bHQuIFRyeSBcIipcIiB0byBjYXB0dXJlIGV2ZXJ5b25lJ3MgdHJhZmZpYy5cbiAgICAgIF0sXG4gICAgICBcImdyYW50c1wiOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBcImhvb2tcIjoge1xuICAgICAgICAgICAgICAgICAgXCJtYXRjaFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJwcm92aWRlcnNcIjogW1wiKlwiXSxcbiAgICAgICAgICAgICAgICAgICAgICBcIm1vZGVsc1wiOiAgICBbXCIqXCJdLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIENhcHR1cmluZyBvbmx5IHRvb2wgY2FsbHNcbiAgICAgICAgICAgICAgICAgICAgICBcImV2ZW50c1wiOiAgICBbXCJ0b29sX2NhbGxfZW50aXJlX3JlcXVlc3RcIl0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXCJob29rXCI6ICAgXCJvc29cIixcbiAgICAgICAgICAgICAgICAgIFwiZmllbGRzXCI6IFtcInVzZXJfbWVzc2FnZVwiLCBcInRvb2xzXCIsIFwicmVxdWVzdF9ib2R5XCIsIFwicmVzcG9uc2VfYm9keVwiXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgXSxcbiAgfSxcbl0sXG5gYGBcblxuMS4gIEFkZCBhIGhvb2sgZm9yIE9zbyBpbiB0aGUgYGhvb2tzYCBzZWN0aW9uLlxuXG5gYGBqc29uXG4vLyBPdGhlciBBcGVydHVyZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLi4uXG5cImhvb2tzXCI6IHtcbiAgICBcIm9zb1wiOiB7XG4gICAgICAgIFwidXJsXCI6ICAgIFwiaHR0cHM6Ly9hcGkub3NvaHEuY29tL2FwaS9hZ2VudHMvdjEvbW9kZWwtcmVxdWVzdFwiLFxuICAgICAgICBcImFwaWtleVwiOiBcIllPVVJfT1NPX0FQSV9LRVlcIixcbiAgICB9LFxufSxcbmBgYFxuXG4jIyMgW01vbml0b3Igc2Vzc2lvbnMgb24gYSBkZXZpY2Ugb3V0c2lkZSB0aGUgdGFpbG5ldF0oI21vbml0b3Itc2Vzc2lvbnMtb24tYS1kZXZpY2Utb3V0c2lkZS10aGUtdGFpbG5ldClcblxuWW91IGNhbiB1c2UgQXBlcnR1cmUgdG8gbW9uaXRvciBMTE0gc2Vzc2lvbnMgZnJvbSBhIGRldmljZSB0aGF0J3Mgbm90IGluIHRoZSBzYW1lIHRhaWxuZXQgYXMgdGhlIEFwZXJ0dXJlIGRlcGxveW1lbnQgdXNpbmcgdGhlIGV4cGVyaW1lbnRhbCBbYHRzLXBsdWdgIGFuZCBgdHMtdW5wbHVnYCB0b29sc10oaHR0cHM6Ly9naXRodWIuY29tL21vc3RseWdlZWsvdHMtcGx1ZykuXG5cbi0gICBUaGUgYHRzLXBsdWdgIGFwcGxpY2F0aW9uIGV4cG9zZXMgbG9jYWxob3N0IHRvIHlvdXIgdGFpbG5ldC5cbi0gICBUaGUgYHRzLXVucGx1Z2AgYXBwbGljYXRpb24gbGV0cyB5b3UgYWNjZXNzIGV4dGVybmFsIHRhaWxuZXQgc2VydmljZXMgbG9jYWxseSAod2l0aG91dCBuZWVkaW5nIHRvIGNvbm5lY3QgdG8gdGhlIHRhaWxuZXQpLlxuXG5UaGUgYHRzLXVucGx1Z2AgYXBwbGljYXRpb24gbGV0cyB5b3UgY2FwdHVyZSBzZXNzaW9ucyBmcm9tIGRldmljZXMgdGhhdCBhcmUgZWl0aGVyIGluIGEgZGlmZmVyZW50IHRhaWxuZXQgb3Igbm90IGNvbm5lY3RlZCB0byBhIHRhaWxuZXQgYXQgYWxsLlxuXG5UbyBzZXQgdXAgYHRzLXVucGx1Z2Agb24gdGhlIGRldmljZSB0byBjYXB0dXJlIExMTSBzZXNzaW9ucyBmcm9tOlxuXG4xLiAgQ2xvbmUgdGhlIFtgdHMtcGx1Z2AgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL21vc3RseWdlZWsvdHMtcGx1ZykgZnJvbSBHaXRIdWIuXG4yLiAgQnVpbGQgdGhlIGB0cy11bnBsdWdgIGFwcGxpY2F0aW9uOlxuICAgIDEuICBSdW4gYG1ha2UgdHMtdW5wbHVnYC5cbiAgICAyLiAgUnVuIGBtYWtlIGluc3RhbGxgLlxuMy4gIFJ1biB0aGUgYHRzLXVucGx1Z2AgY29tbWFuZCB0byBsaW5rIHRvIHRoZSBBcGVydHVyZSBwcm94eSBpbnN0YW5jZS4gWW91J2xsIG5lZWQgdG8gdXNlIHRoZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgKEZRRE4pIG9mIHRoZSBBcGVydHVyZSBwcm94eSBhbmQgYW4gYXZhaWxhYmxlIGFuZCBhY2Nlc3NpYmxlIHBvcnQgbnVtYmVyIChmb3IgZXhhbXBsZSwgcG9ydCBgOTk5NmApLlxuXG5gYGBzaGVsbFxudHMtdW5wbHVnIC1kaXIgLi9zdGF0ZSAtcG9ydCA8UE9SVF9OVU1CRVI+IGFpLjxZT1VSX1RBSUxORVRfSUQ+LnRzLm5ldFxuYGBgXG5cbk5leHQsIHlvdSdsbCBuZWVkIHRvIGFwcHJvdmUgdGhlIGRldmljZSBmcm9tIHRoZSBbTWFjaGluZXNdKGh0dHBzOi8vbG9naW4udGFpbHNjYWxlLmNvbS9hZG1pbi9tYWNoaW5lcykgb2YgdGhlIGFkbWluIGNvbnNvbGUgb2YgdGhlIHRhaWxuZXQgdGhhdCdzIGhvc3RpbmcgQXBlcnR1cmUuIEFmdGVyIHlvdSBhcHByb3ZlIGl0LCB1c2VycyBvbiB0aGF0IGRldmljZSBjYW4gYWNjZXNzIEFwZXJ0dXJlIGZyb20gYGh0dHA6Ly9sb2NhbGhvc3Q6PFBPUlRfTlVNQkVSPmAuXG5cbiMjIFtMaW1pdGF0aW9uc10oI2xpbWl0YXRpb25zKVxuXG5BcGVydHVyZSBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9ucyB5b3Ugc2hvdWxkIGNvbnNpZGVyIGJlZm9yZSBkZXBsb3ltZW50LiBCdXQga2VlcCBpbiBtaW5kIHRoYXQgd2UncmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhbmQgaW1wcm92aW5nIEFwZXJ0dXJlLCBzbyB0aGlzIGxpc3Qgd2lsbCB1cGRhdGUgZnJlcXVlbnRseS5cblxuLSAgICoqVGFpbHNjYWxlIHJlcXVpcmVtZW50KipcbiAgICBcbiAgICBBcGVydHVyZSB3b3JrcyBleGNsdXNpdmVseSBvbiB0YWlsbmV0cy4gVGhlIGVudGlyZSBhdXRoZW50aWNhdGlvbiBtb2RlbCBkZXBlbmRzIG9uIFRhaWxzY2FsZSBpZGVudGl0eS4gQnV0LCB5b3UgY2FuIHVzZSBBcGVydHVyZSB0byBtb25pdG9yIGVudmlyb25tZW50cyBpbiBhbm90aGVyIHRhaWxuZXQgb3Igbm90IGNvbm5lY3RlZCB0byBhIHRhaWxuZXQgYXQgYWxsIHVzaW5nIFt0cy1wbHVnXShodHRwczovL2dpdGh1Yi5jb20vbW9zdGx5Z2Vlay90cy1wbHVnKS5cbiAgICBcbi0gICAqKlByb3ZpZGVyIHN1cHBvcnQqKlxuICAgIFxuICAgIE1ldHJpY3MgZXh0cmFjdGlvbiByZWxpZXMgb24gcGFyc2luZyBwcm92aWRlciByZXNwb25zZSBmb3JtYXRzLiBBcGVydHVyZSBoYW5kbGVzIE9wZW5BSSwgQW50aHJvcGljLCBHZW1pbmksIGFuZCBPcGVuQUktY29tcGF0aWJsZSBBUElzLiBOZXcgcHJvdmlkZXJzIG9yIGZvcm1hdCBjaGFuZ2VzIG1pZ2h0IHJlcXVpcmUgdXBkYXRlcy5cbiAgICBcbi0gICAqKk5vIHJlcXVlc3QgbW9kaWZpY2F0aW9uKipcbiAgICBcbiAgICBUaGUgQXBlcnR1cmUgcHJveHkgY2FwdHVyZXMgYW5kIGZvcndhcmRzIHJlcXVlc3RzIHdpdGhvdXQgbW9kaWZpY2F0aW9uIChleGNlcHQgYXV0aGVudGljYXRpb24gaGVhZGVycykuIEZlYXR1cmVzIGxpa2UgcmF0ZSBsaW1pdGluZywgcmVxdWVzdCBmaWx0ZXJpbmcsIG9yIHByb21wdCBpbmplY3Rpb24gZGV0ZWN0aW9uIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4gVGhlc2UgZmVhdHVyZXMgYXJlIHBsYW5uZWQuXG4gICAgXG5cbiMjIFtUcm91Ymxlc2hvb3RpbmddKCN0cm91Ymxlc2hvb3RpbmcpXG5cblVzZSB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHRvIGRpYWdub3NlIGFuZCByZXNvbHZlIGNvbW1vbiBpc3N1ZXMgd2l0aCBBcGVydHVyZS5cblxuIyMjIFtBbGwgc2Vzc2lvbnMgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUgc2FtZSB1c2VyXSgjYWxsLXNlc3Npb25zLWFwcGVhci10by1jb21lLWZyb20tdGhlLXNhbWUtdXNlcilcblxuSWYgeW91IHVzZSB0YWctYmFzZWQgaWRlbnRpdGllcyB0byBhdXRoZW50aWNhdGUgdXNlciBkZXZpY2VzLCBhbGwgTExNIHNlc3Npb25zIGZyb20gdGhvc2UgZGV2aWNlcyBhcHBlYXIgdG8gY29tZSBmcm9tIHRoZSBzYW1lIHVzZXIuIFRoaXMgaGFwcGVucyBiZWNhdXNlIFRhaWxzY2FsZSB0YWdzIGRvIG5vdCBwcm92aWRlIHBlci11c2VyIGlkZW50aXR5LiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRhZ3MgaXMgc2VydmljZSBhY2NvdW50IG9yIHNlcnZlciBkZXZpY2UgYXV0aGVudGljYXRpb24sIG5vdCBpbmRpdmlkdWFsIHVzZXIgYXV0aGVudGljYXRpb24uIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgdXNlIGEgdGFnIGlkZW50aXR5IGZvciBhIGZsZWV0IG9mIFBvc3RncmVTUUwgZGF0YWJhc2Ugc2VydmVycy4gUmVmZXIgdG8gdGhlIFt0YWdzIGRvY3VtZW50YXRpb25dKC9kb2NzL2ZlYXR1cmVzL3RhZ3MpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5UbyByZXNvbHZlIHRoaXMgaXNzdWUsIGVuc3VyZSB0aGF0IHVzZXJzIGNvbm5lY3QgdG8gQXBlcnR1cmUgZnJvbSBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVpciBpbmRpdmlkdWFsIFRhaWxzY2FsZSBhY2NvdW50cy5cblxuIyMjIFtIVFRQUyBjb25uZWN0aW9uIGlzc3Vlc10oI2h0dHBzLWNvbm5lY3Rpb24taXNzdWVzKVxuXG5JZiB5b3UgZW5jb3VudGVyIEhUVFBTIGNvbm5lY3Rpb24gaXNzdWVzIHdoZW4gYWNjZXNzaW5nIHRoZSBBcGVydHVyZSB3ZWIgaW50ZXJmYWNlIG9yIHVzaW5nIExMTSBjbGllbnRzLCBtYWtlIHlvdSdyZSB1c2luZyBgaHR0cDovL2AgYW5kIG5vdCBgaHR0cHM6Ly9gIGZvciB0aGUgQXBlcnR1cmUgVVJMLiBGb3IgZXhhbXBsZSwgdXNlIGBodHRwOi8vYWkvdWkvYCAocmVwbGFjZSBgYWlgIHdpdGggeW91ciBBcGVydHVyZSBob3N0bmFtZSkuXG5cbiMjIFtGQVFdKCNmYXEpXG5cblRoaXMgc2VjdGlvbiBhbnN3ZXJzIGNvbW1vbiBxdWVzdGlvbnMgYWJvdXQgQXBlcnR1cmUuXG5cbioqV2hhdCBoYXBwZW5zIGlmIGEgdXNlciB0cmllcyB0byBjb25uZWN0IGZyb20gb3V0c2lkZSB0aGUgdGFpbG5ldD8qKlxuXG5UaGUgY29ubmVjdGlvbiBmYWlscyBhdCB0aGUgbmV0d29yayBsZXZlbC4gQXBlcnR1cmUgbGlzdGVucyBvbiBUYWlsc2NhbGUgaW50ZXJmYWNlcywgc28gdHJhZmZpYyBmcm9tIG91dHNpZGUgeW91ciB0YWlsbmV0IG5ldmVyIHJlYWNoZXMgdGhlIHByb3h5LiBIb3dldmVyLCB5b3UgY2FuIGV4cGxpY2l0bHkgW3NldCB1cCBBcGVydHVyZSBmb3IgZGV2aWNlcyBvdXRzaWRlIHRoZSB0YWlsbmV0IHVzaW5nIHRzLXVucGx1Z10oI21vbml0b3Itc2Vzc2lvbnMtb24tYS1kZXZpY2Utb3V0c2lkZS10aGUtdGFpbG5ldCkuXG5cbioqV2hhdCBoYXBwZW5zIHdoZW4gSSBhZGQgYSBuZXcgTExNIHByb3ZpZGVyIHRvIHRoZSBjb25maWd1cmF0aW9uPyoqXG5cbkNsaWVudHMgY2FuIGltbWVkaWF0ZWx5IHVzZSBtb2RlbHMgZnJvbSB0aGF0IHByb3ZpZGVyIGJ5IHNwZWNpZnlpbmcgdGhlIG1vZGVsIG5hbWUgaW4gdGhlaXIgcmVxdWVzdHMuIE5vIGNsaWVudCBjaGFuZ2VzIGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoZSBwcm94eSByb3V0ZXMgYmFzZWQgb24gbW9kZWwgbmFtZS5cblxuKipXaGF0IGhhcHBlbnMgaWYgYSBzdHJlYW1pbmcgcmVzcG9uc2UgaXMgaW50ZXJydXB0ZWQgbWlkLXN0cmVhbT8qKlxuXG5UaGUgcHJveHkgY2FwdHVyZXMgd2hhdGV2ZXIgZGF0YSBhcnJpdmVkIGJlZm9yZSB0aGUgaW50ZXJydXB0aW9uLiBNZXRyaWNzIGV4dHJhY3Rpb24gbWlnaHQgZmFpbCBvciByZXBvcnQgcGFydGlhbCBkYXRhLCBidXQgdGhlIHByb3h5IHN0b3JlcyB0aGUgcGFydGlhbCBjYXB0dXJlIGZvciBkZWJ1Z2dpbmcuXG5cbioqRG8gY2xpZW50cyBuZWVkIEFQSSBrZXlzIHRvIHVzZSBBcGVydHVyZT8qKlxuXG5Oby4gQXBlcnR1cmUgaWRlbnRpZmllcyB1c2VycyB0aHJvdWdoIFRhaWxzY2FsZSBhbmQgaW5qZWN0cyBwcm92aWRlciBBUEkga2V5cyBhdXRvbWF0aWNhbGx5LiBDbGllbnRzIGNvbm5lY3Qgd2l0aG91dCBjcmVkZW50aWFscy5cblxuKipDYW4gSSB1c2UgQXBlcnR1cmUgd2l0aCBwcm92aWRlcnMgbm90IGxpc3RlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbj8qKlxuXG5ZZXMsIGlmIHRoZSBwcm92aWRlciB1c2VzIGFuIE9wZW5BSS1jb21wYXRpYmxlIEFQSSBmb3JtYXQuIENvbmZpZ3VyZSBpdCBhcyBhIHByb3ZpZGVyIHdpdGggYG9wZW5haV9jaGF0OiB0cnVlYCBjb21wYXRpYmlsaXR5IGFuZCB0aGUgYXBwcm9wcmlhdGUgYXV0aG9yaXphdGlvbiB0eXBlLlxuXG4qKkNhbiBJIHVzZSBBcGVydHVyZSB3aXRoIHNlbGYtaG9zdGVkIExMTXM/KipcblxuWWVzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3h5IHNlbGYtaG9zdGVkIExMTXMgd2l0aCBBcGVydHVyZSB3aXRob3V0IGV4cG9zaW5nIHRoZSBlbmRwb2ludHMgdG8gdGhlIHB1YmxpYyBpbnRlcm5ldC5cblxuKipDYW4gSSB1c2UgQXBlcnR1cmUgaW4gQ0kvQ0QgZW52aXJvbm1lbnRzLCBzdWNoIGFzIEdpdEh1YiBBY3Rpb25zPyoqXG5cblllcywgYXMgbG9uZyBhcyBpdCdzIHBvc3NpYmxlIHRvIHJ1biBUYWlsc2NhbGUuIEFwZXJ0dXJlIHdvcmtzIGluIGNvbW1vbiBjb250YWluZXJpemVkIGVudmlyb25tZW50cyBsaWtlIEdpdEh1YiBBY3Rpb25zIHdpdGhvdXQgbmVlZGluZyB0byBleHBvc2UgZWl0aGVyIHRoZSBhZ2VudCBvciB0aGUgZ2F0ZXdheSB0byB0aGUgcHVibGljIGludGVybmV0LlxuXG4qKkNhbiBJIHVzZSBBcGVydHVyZSB3aXRoIG11bHRpcGxlIHRhaWxuZXRzPyoqXG5cblllcywgeW91IGNhbiBbdXNlIEFwZXJ0dXJlIHRvIG1vbml0b3IgZW52aXJvbm1lbnRzIGluIGFub3RoZXIgdGFpbG5ldF0oI21vbml0b3Itc2Vzc2lvbnMtb24tYS1kZXZpY2Utb3V0c2lkZS10aGUtdGFpbG5ldCkgdXNpbmcgW3RzLXBsdWddKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3N0bHlnZWVrL3RzLXBsdWcpLiBZb3UgY2FuIGFsc28gdXNlIHRzLXVucGx1ZyB0byBjYXB0dXJlIExMTSBzZXNzaW9ucyBmcm9tIGVudmlyb25tZW50cyB0aGF0IGFyZW4ndCBjb25uZWN0ZWQgdG8gYSB0YWlsbmV0IGF0IGFsbC5cblxuT24gdGhpcyBwYWdlXG5cbi0gICBbUmVxdWlyZW1lbnRzXSgjcmVxdWlyZW1lbnRzKVxuLSAgIFtVc2UgY2FzZXNdKCN1c2UtY2FzZXMpXG4tICAgW0hvdyBpdCB3b3Jrc10oI2hvdy1pdC13b3JrcylcbiAgICAtICAgW0lkZW50aXR5IHRocm91Z2ggVGFpbHNjYWxlXSgjaWRlbnRpdHktdGhyb3VnaC10YWlsc2NhbGUpXG4gICAgLSAgIFtSZXF1ZXN0IHJvdXRpbmcgYnkgbW9kZWxdKCNyZXF1ZXN0LXJvdXRpbmctYnktbW9kZWwpXG4gICAgLSAgIFtUZWxlbWV0cnkgY2FwdHVyZV0oI3RlbGVtZXRyeS1jYXB0dXJlKVxuICAgIC0gICBbU2Vzc2lvbiB0cmFja2luZ10oI3Nlc3Npb24tdHJhY2tpbmcpXG4tICAgW0dldCBzdGFydGVkXSgjZ2V0LXN0YXJ0ZWQpXG4gICAgLSAgIFtDb25maWd1cmUgQXBlcnR1cmUgc2V0dGluZ3NdKCNjb25maWd1cmUtYXBlcnR1cmUtc2V0dGluZ3MpXG4gICAgLSAgIFtHcmFudCB1c2VycyBhY2Nlc3MgdG8gQXBlcnR1cmVdKCNncmFudC11c2Vycy1hY2Nlc3MtdG8tYXBlcnR1cmUpXG4gICAgLSAgIFtTZXQgdXAgTExNIGNsaWVudHMgdG8gdXNlIEFwZXJ0dXJlXSgjc2V0LXVwLWxsbS1jbGllbnRzLXRvLXVzZS1hcGVydHVyZSlcbiAgICAgICAgLSAgIFtDbGF1ZGUgQ29kZV0oI2NsYXVkZS1jb2RlKVxuICAgICAgICAgICAgLSAgIFtDbGF1ZGUgQ29kZSB3aXRoIEFtYXpvbiBCZWRyb2NrXSgjY2xhdWRlLWNvZGUtd2l0aC1hbWF6b24tYmVkcm9jaylcbiAgICAgICAgICAgIC0gICBbQ2xhdWRlIENvZGUgd2l0aCBWZXJ0ZXggQUldKCNjbGF1ZGUtY29kZS13aXRoLXZlcnRleC1haSlcbiAgICAgICAgLSAgIFtDb2RleF0oI2NvZGV4KVxuICAgICAgICAtICAgW0dlbWluaSBDTEksIFJvbyBDb2RlLCBDbGluZSwgYW5kIG90aGVyIGNsaWVudHNdKCNnZW1pbmktY2xpLXJvby1jb2RlLWNsaW5lLWFuZC1vdGhlci1jbGllbnRzKVxuICAgICAgICAtICAgW0N1c3RvbSBhcHBsaWNhdGlvbnNdKCNjdXN0b20tYXBwbGljYXRpb25zKVxuICAgIC0gICBbVGVzdCB5b3VyIEFwZXJ0dXJlIGNvbmZpZ3VyYXRpb25dKCN0ZXN0LXlvdXItYXBlcnR1cmUtY29uZmlndXJhdGlvbilcbi0gICBbV2ViIGRhc2hib2FyZF0oI3dlYi1kYXNoYm9hcmQpXG4gICAgLSAgIFtEYXNoYm9hcmQgcGFnZV0oI2Rhc2hib2FyZC1wYWdlKVxuICAgIC0gICBbTG9ncyBwYWdlXSgjbG9ncy1wYWdlKVxuICAgIC0gICBbVG9vbCBVc2UgcGFnZV0oI3Rvb2wtdXNlLXBhZ2UpXG4gICAgLSAgIFtBZG9wdGlvbiBwYWdlXSgjYWRvcHRpb24tcGFnZSlcbiAgICAtICAgW01vZGVscyBwYWdlXSgjbW9kZWxzLXBhZ2UpXG4gICAgLSAgIFtTZXR0aW5ncyBwYWdlXSgjc2V0dGluZ3MtcGFnZSlcbi0gICBbSG93LXRvIGd1aWRlc10oI2hvdy10by1ndWlkZXMpXG4gICAgLSAgIFtJbnRlZ3JhdGUgQXBlcnR1cmUgd2l0aCBPc29dKCNpbnRlZ3JhdGUtYXBlcnR1cmUtd2l0aC1vc28pXG4gICAgLSAgIFtNb25pdG9yIHNlc3Npb25zIG9uIGEgZGV2aWNlIG91dHNpZGUgdGhlIHRhaWxuZXRdKCNtb25pdG9yLXNlc3Npb25zLW9uLWEtZGV2aWNlLW91dHNpZGUtdGhlLXRhaWxuZXQpXG4tICAgW0xpbWl0YXRpb25zXSgjbGltaXRhdGlvbnMpXG4tICAgW1Ryb3VibGVzaG9vdGluZ10oI3Ryb3VibGVzaG9vdGluZylcbiAgICAtICAgW0FsbCBzZXNzaW9ucyBhcHBlYXIgdG8gY29tZSBmcm9tIHRoZSBzYW1lIHVzZXJdKCNhbGwtc2Vzc2lvbnMtYXBwZWFyLXRvLWNvbWUtZnJvbS10aGUtc2FtZS11c2VyKVxuICAgIC0gICBbSFRUUFMgY29ubmVjdGlvbiBpc3N1ZXNdKCNodHRwcy1jb25uZWN0aW9uLWlzc3Vlcylcbi0gICBbRkFRXSgjZmFxKVxuXG5TY3JvbGwgdG8gdG9wXG5cblByb2R1Y3RcblxuW0hvdyBpdCB3b3Jrc10oL2Jsb2cvaG93LXRhaWxzY2FsZS13b3JrcylbUHJpY2luZ10oL3ByaWNpbmcpW0ludGVncmF0aW9uc10oL2ludGVncmF0aW9ucylbRmVhdHVyZXNdKC9mZWF0dXJlcylbQ29tcGFyZSBUYWlsc2NhbGVdKC9jb21wYXJlKVxuXG5Vc2UgQ2FzZXNcblxuW0J1c2luZXNzIFZQTl0oL3VzZS1jYXNlcy9idXNpbmVzcy12cG4pW0NJL0NEXSgvdXNlLWNhc2VzL2NpLWNkKVtJbmZyYSBBY2Nlc3NdKC91c2UtY2FzZXMvaW5mcmFzdHJ1Y3R1cmUtYWNjZXNzKVtDbG91ZCBDb25uZWN0aXZpdHldKC91c2UtY2FzZXMvY2xvdWQtY29ubmVjdGl2aXR5KVtaZXJvIFRydXN0IE5ldHdvcmtpbmddKC91c2UtY2FzZXMvemVyby10cnVzdC1uZXR3b3JraW5nKVtIb21lbGFiXSgvdXNlLWNhc2VzL2hvbWVsYWIpXG5cblJlc291cmNlc1xuXG5bQmxvZ10oL2Jsb2cpW0V2ZW50cyAmIFdlYmluYXJzXSgvZXZlbnRzLXdlYmluYXJzKVtQYXJ0bmVyc2hpcHNdKC9wYXJ0bmVyc2hpcHMpXG5cbkNvbXBhbnlcblxuW0NvbXBhbnldKC9jb21wYW55KVtDYXJlZXJzXSgvY2FyZWVycylbUHJlc3NdKC9wcmVzcylcblxuSGVscCAmIFN1cHBvcnRcblxuW1N1cHBvcnRdKC9jb250YWN0L3N1cHBvcnQpW1NhbGVzXSgvY29udGFjdC9zYWxlcylbU2VjdXJpdHldKC9zZWN1cml0eSlbTGVnYWxdKC9sZWdhbClbT3BlbiBTb3VyY2VdKC9vcGVuc291cmNlKVtDaGFuZ2Vsb2ddKC9jaGFuZ2Vsb2cpW1RhaWxzY2FsZSBTdGF0dXNdKGh0dHBzOi8vc3RhdHVzLnRhaWxzY2FsZS5jb20vKVxuXG5MZWFyblxuXG5bU1NIIGtleXNdKC9sZWFybi9nZW5lcmF0ZS1zc2gta2V5cylbRG9ja2VyIFNTSF0oL2xlYXJuL3NzaC1pbnRvLWRvY2tlci1jb250YWluZXIpW05BVCBUcmF2ZXJzYWxdKC9ibG9nL2hvdy1uYXQtdHJhdmVyc2FsLXdvcmtzKVtNYWdpY0ROU10oL2Jsb2cvMjAyMS0wOS1wcml2YXRlLWRucy13aXRoLW1hZ2ljZG5zKVtQQU1dKC9sZWFybi9wcml2aWxlZ2VkLWFjY2Vzcy1tYW5hZ2VtZW50KVtBbGwgYXJ0aWNsZXNdKC9sZWFybilcblxuPC8+XG5cbltUZXJtcyBvZiBTZXJ2aWNlXSgvdGVybXMpW1ByaXZhY3kgUG9saWN5XSgvcHJpdmFjeS1wb2xpY3kpW0NhbGlmb3JuaWEgTm90aWNlXShodHRwczovL3RhaWxzY2FsZS5jb20vcHJpdmFjeS1wb2xpY3kjY2FsaWZvcm5pYS1ub3RpY2UpW0Nvb2tpZSBOb3RpY2VdKGh0dHBzOi8vdGFpbHNjYWxlLmNvbS9jb29raWUtbm90aWNlKSFbQ2hlY2sgbWFyayBhbmQgeCBvbiBhIHdoaXRlIGFuZCBibHVlIHBpbGwgYnV0dG9uXShodHRwczovL2Nkbi5zYW5pdHkuaW8vaW1hZ2VzL3c3N2k3bTh4L3Byb2R1Y3Rpb24vMDdkODUzZjUwNzAzOWIyNDg5ZDk4MThjYjZlZTc0NDJjMWI2MGUyYS0zMHgxNC5zdmcpWW91ciBQcml2YWN5IENob2ljZXNcblxuV2lyZUd1YXJkIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgSmFzb24gQS4gRG9uZW5mZWxkLlxuXG48aHR0cHM6Ly90d2l0dGVyLmNvbS90YWlsc2NhbGU+PGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS90YWlsc2NhbGUvPjxodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS90YWlsc2NhbGU+PGh0dHBzOi8vaGFjaHlkZXJtLmlvL0B0YWlsc2NhbGU+PGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BUYWlsc2NhbGU+XG5cbsKpIDIwMjYgVGFpbHNjYWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGFpbHNjYWxlIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgVGFpbHNjYWxlIEluYy4ifV0sImRldGFpbHMiOnsidXJsIjoiaHR0cHM6Ly90YWlsc2NhbGUuY29tL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUiLCJtYXJrZG93biI6Ik1vbml0b3IgYW5kIHNlY3VyZSBMTE0gdXNhZ2Ugd2l0aCBBcGVydHVyZSBieSBUYWlsc2NhbGUuXG5cblByb2R1Y3RcblxuTWVldCBUYWlsc2NhbGVcblxuLSAgIFtIb3cgaXQgd29ya3NdKC9ibG9nL2hvdy10YWlsc2NhbGUtd29ya3MpXG4tICAgW1doeSBUYWlsc2NhbGVdKC93aHktdGFpbHNjYWxlKVxuLSAgIFtXaXJlR3VhcmTCriBmb3IgRW50ZXJwcmlzZXNdKC93aXJlZ3VhcmQtdnBuKVxuLSAgIFtCcmluZyBUYWlsc2NhbGUgdG8gV29ya10oL2JyaW5nLXRhaWxzY2FsZS10by13b3JrKVxuXG5FeHBsb3JlXG5cbi0gICBbSW50ZWdyYXRpb25zXSgvaW50ZWdyYXRpb25zKVxuLSAgIFtGZWF0dXJlc10oL2ZlYXR1cmVzKVxuLSAgIFtDb21wYXJlIFRhaWxzY2FsZV0oL2NvbXBhcmUpXG4tICAgW0NvbW11bml0eSBQcm9qZWN0c10oL2NvbW11bml0eS9jb21tdW5pdHktcHJvamVjdHMpXG4tICAgW1BhcnRuZXJzaGlwc10oL3BhcnRuZXJzaGlwcylcblxuU29sdXRpb25zXG5cbkJ5IHVzZS1jYXNlXG5cbi0gICBbQnVzaW5lc3MgVlBOXSgvdXNlLWNhc2VzL2J1c2luZXNzLXZwbilcbi0gICBbQ0kvQ0RdKC91c2UtY2FzZXMvY2ktY2QpXG4tICAgW0luZnJhIEFjY2Vzc10oL3VzZS1jYXNlcy9pbmZyYXN0cnVjdHVyZS1hY2Nlc3MpXG4tICAgW0Nsb3VkIENvbm5lY3Rpdml0eV0oL3VzZS1jYXNlcy9jbG91ZC1jb25uZWN0aXZpdHkpXG4tICAgW1plcm8gVHJ1c3QgTmV0d29ya2luZ10oL3VzZS1jYXNlcy96ZXJvLXRydXN0LW5ldHdvcmtpbmcpXG4tICAgW0hvbWVsYWJdKC91c2UtY2FzZXMvaG9tZWxhYilcbi0gICBbU2VjdXJpbmcgQUldKC91c2UtY2FzZXMvc2VjdXJpbmctYWkpXG5cbkJ5IHJvbGVcblxuLSAgIFtEZXZPcHNdKC9zb2x1dGlvbnMvZGV2b3BzKVxuLSAgIFtJVF0oL3NvbHV0aW9ucy9pdClcbi0gICBbU2VjdXJpdHldKC9zb2x1dGlvbnMvc2VjdXJpdHkpXG5cbltFbnRlcnByaXNlXSgvZW50ZXJwcmlzZSlcblxuW0N1c3RvbWVyc10oL2N1c3RvbWVycylcblxuTmF2IGhlYWRpbmcgaGVyZVxuXG4tICAgWyFbQWx0IHRleHRdKGh0dHBzOi8vY2RuLnNhbml0eS5pby9pbWFnZXMvdzc3aTdtOHgvcHJvZHVjdGlvbi9hMDZkYzYxMmIxZTNlNGY0ZGY1M2E3MjAzMDAwMjYwMDYzOWE4NzM4LTMwMHgxMjAucG5nP3c9NjQwJnE9NzUmZml0PWNsaXAmYXV0bz1mb3JtYXQpXG4gICAgXG4gICAgVGl0bGUgaGVyZVxuICAgIFxuICAgIEhvdyBDcmlibCBFbmFibGVzIFNlY3VyZSBXb3JrIEZyb20gQW55d2hlcmUgd2l0aCBUYWlsc2NhbGVdKGh0dHBzOi8vdGFpbHNjYWxlLmNvbS9jdXN0b21lcnMpXG5cbltEb2NzXSgvZG9jcylcblxuW0Jsb2ddKC9ibG9nKVxuXG5bUHJpY2luZ10oL3ByaWNpbmcpXG5cbltEb3dubG9hZF0oL2Rvd25sb2FkKVxuXG5bU2NoZWR1bGUgYSBkZW1vXSgvY29udGFjdC9zYWxlcylcblxuW0dldCBzdGFydGVkIC0gaXQncyBmcmVlIV0oaHR0cHM6Ly9sb2dpbi50YWlsc2NhbGUuY29tL3N0YXJ0KVtMb2cgaW5dKGh0dHBzOi8vbG9naW4udGFpbHNjYWxlLmNvbS93ZWxjb21lKVxuXG48aHR0cHM6Ly90d2l0dGVyLmNvbS90YWlsc2NhbGU+PGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS90YWlsc2NhbGUvPjxodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS90YWlsc2NhbGU+PGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BUYWlsc2NhbGU+XG5cbsKpIDIwMjZcblxuLSAgIFRvZ2dsZVtTdGFydF0oL2RvY3MvaW5zdGFsbC9zdGFydClcblxuW1F1aWNrc3RhcnRdKC9kb2NzL2hvdy10by9xdWlja3N0YXJ0KS0gICBUb2dnbGVbSW5zdGFsbCBUYWlsc2NhbGVdKC9kb2NzL2luc3RhbGwpXG4tICAgVG9nZ2xlW1F1aWNrIGd1aWRlc10oL2RvY3MvcXVpY2stZ3VpZGVzKVxuW09wZW5WUE4gbWlncmF0aW9uIGd1aWRlXSgvZG9jcy9zb2x1dGlvbnMvbWlncmF0ZS1vcGVudnBuLXRhaWxzY2FsZSlbTGVnYWN5IFZQTiBtaWdyYXRpb24gZ3VpZGVdKC9kb2NzL3NvbHV0aW9ucy9taWdyYXRlLWxlZ2FjeS12cG4tdGFpbHNjYWxlKS0gICBUb2dnbGVbU2V0IHVwIGFuIGlkZW50aXR5IHByb3ZpZGVyXSgvZG9jcy9pbnRlZ3JhdGlvbnMvaWRlbnRpdHkpXG5bV2hhdCBpcyBUYWlsc2NhbGU/XSgvZG9jcy9jb25jZXB0cy93aGF0LWlzLXRhaWxzY2FsZSlcblxuLSAgIFRvZ2dsZVtNYW5hZ2UgQWNjZXNzXSgvZG9jcy9tYW5hZ2UpXG5cbi0gICBUb2dnbGVbTWFuYWdlIGFjY2VzcyBjb250cm9sXSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbClcbi0gICBUb2dnbGVbTWFuYWdlIGp1c3QtaW4tdGltZSBhY2Nlc3NdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2p1c3QtaW4tdGltZS1hY2Nlc3MpXG4tICAgVG9nZ2xlW01hbmFnZSBkZXZpY2VzXSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbC9kZXZpY2UtbWFuYWdlbWVudClcbi0gICBUb2dnbGVbTWFuYWdlIHVzZXJzXSgvZG9jcy9tYW5hZ2UtdXNlcnMpXG5bVGFpbG5ldCBMb2NrXSgvZG9jcy9mZWF0dXJlcy90YWlsbmV0LWxvY2spXG5cbi0gICBUb2dnbGVbUm91dGUgVHJhZmZpY10oL2RvY3Mvcm91dGUpXG5cbi0gICBUb2dnbGVbU2V0IHVwIGEgc3VibmV0IHJvdXRlcl0oL2RvY3MvZmVhdHVyZXMvc3VibmV0LXJvdXRlcnMpXG4tICAgVG9nZ2xlW1NldCB1cCBhbiBleGl0IG5vZGVdKC9kb2NzL2ZlYXR1cmVzL2V4aXQtbm9kZXMpXG4tICAgVG9nZ2xlW1NldCB1cCBhbiBhcHAgY29ubmVjdG9yXSgvZG9jcy9mZWF0dXJlcy9hcHAtY29ubmVjdG9ycy9ob3ctdG8vc2V0dXApXG4tICAgVG9nZ2xlW1VzZSBETlNdKC9kb2NzL3JlZmVyZW5jZS9kbnMtaW4tdGFpbHNjYWxlKVxuW1NldCB1cCBNYWdpY0ROU10oL2RvY3MvZmVhdHVyZXMvbWFnaWNkbnMpW1NldCB1cCBoaWdoIGF2YWlsYWJpbGl0eV0oL2RvY3MvaG93LXRvL3NldC11cC1oaWdoLWF2YWlsYWJpbGl0eSlcblxuLSAgIFRvZ2dsZVtTZXQgVXAgU2VydmVyc10oL2RvY3Mvc2VydmVycylcblxuW1NldCB1cCBhIHNlcnZlcl0oL2RvY3MvaG93LXRvL3NldC11cC1zZXJ2ZXJzKVtVc2UgdGFnc10oL2RvY3MvZmVhdHVyZXMvdGFncylbSW5zdGFsbCBUYWlsc2NhbGUgd2l0aCBjbG91ZC1pbml0XSgvZG9jcy9pbnN0YWxsL3dpdGgtY2xvdWQtaW5pdClbVXNlIGF1dGgga2V5c10oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wvYXV0aC1rZXlzKVtBdXRvbWF0ZSBrZXkgZXhwaXJ5XSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbC9rZXktZXhwaXJ5KS0gICBUb2dnbGVbVXNlIFRhaWxzY2FsZSBTU0hdKC9kb2NzL2ZlYXR1cmVzL3RhaWxzY2FsZS1zc2gpXG5bU2V0IHVwIEhUVFBTIGNlcnRpZmljYXRlc10oL2RvY3MvaG93LXRvL3NldC11cC1odHRwcy1jZXJ0aWZpY2F0ZXMpW1J1biBhbiBlcGhlbWVyYWwgbm9kZV0oL2RvY3MvZmVhdHVyZXMvZXBoZW1lcmFsLW5vZGVzKVtSdW4gdW5hdHRlbmRlZF0oL2RvY3MvaG93LXRvL3J1bi11bmF0dGVuZGVkKVxuXG4tICAgVG9nZ2xlW0FjY2VzcyAmIFNoYXJlIFNlcnZpY2VzXSgvZG9jcy9zaGFyZSlcblxuW1RhaWxzY2FsZSBzZXJ2aWNlc10oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLXNlcnZpY2VzKVtFbmRwb2ludCBjb2xsZWN0aW9uXSgvZG9jcy9mZWF0dXJlcy9zZXJ2aWNlcylbU2hhcmUgbm9kZXNdKC9kb2NzL2ZlYXR1cmVzL3NoYXJpbmcpLSAgIFRvZ2dsZVtVc2UgVGFpbGRyb3BdKC9kb2NzL2ZlYXR1cmVzL3RhaWxkcm9wKVxuXG4tICAgVG9nZ2xlW1NoYXJlIGEgd2ViIHNlcnZlcl0oL2RvY3Mvc2hhcmUtd2ViLXNlcnZlcilcblxuLSAgIFRvZ2dsZVtUYWlsc2NhbGUgRnVubmVsXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtZnVubmVsKVxuLSAgIFRvZ2dsZVtUYWlsc2NhbGUgU2VydmVdKC9kb2NzL2ZlYXR1cmVzL3RhaWxzY2FsZS1zZXJ2ZSlcblxuLSAgIFRvZ2dsZVtTb2x1dGlvbnNdKC9kb2NzL3NvbHV0aW9ucylcblxuW1NlY3VyZSB0cmFmZmljIHdpdGggQXBwbGUgVFZdKC9kb2NzL3NvbHV0aW9ucy9zZWN1cmUtdHJhZmZpYy1wdWJsaWMtd2lmaS1hcHBsZXR2KVtTZWN1cmUgR2l0SHViIEFjdGlvbnMgcnVubmVyc10oL2RvY3Mvc29sdXRpb25zL2Nvbm5lY3QtZ2l0aHViLUNJQ0Qtd29ya2Zsb3dzLXRvLXByaXZhdGUtaW5mcmFzdHJ1Y3R1cmUtd2l0aG91dC1wdWJsaWMtZXhwb3N1cmUpW0Jsb2NrIGFkcyB3aXRoIGEgUmFzcGJlcnJ5IFBpXSgvZG9jcy9zb2x1dGlvbnMvYmxvY2stYWRzLWFsbC1kZXZpY2VzLWFueXdoZXJlLXVzaW5nLXJhc3BiZXJyeS1waSlbQWNjZXNzIHJlbW90ZSBkZXNrdG9wcyB3aXRoIFdpbmRvd3MgUkRQXSgvZG9jcy9zb2x1dGlvbnMvYWNjZXNzLXJlbW90ZS1kZXNrdG9wcy11c2luZy13aW5kb3dzLXJkcClbQWNjZXNzIHJlbW90ZSBkZXNrdG9wcyB3aXRoIFJ1c3REZXNrXSgvZG9jcy9zb2x1dGlvbnMvYWNjZXNzLXJlbW90ZS1kZXNrdG9wcy13aXRoLXJ1c3RkZXNrKVtDb25uZWN0IHRvIE1vbmdvREIgQXRsYXNdKC9kb2NzL3NvbHV0aW9ucy9jcmVhdGUtYS1zZWN1cmUtY29ubmVjdGlvbi10by1tb25nb2RiLWF0bGFzKVtDb2RlIGZyb20geW91ciBpUGFkXSgvZG9jcy9zb2x1dGlvbnMvY29kZS1vbi1pcGFkLXZzY29kZS1jYWRkeS1jb2RlLXNlcnZlcilbTG9jayBkb3duIGEgc2VydmVyXSgvZG9jcy9ob3ctdG8vc2VjdXJlLXVidW50dS1zZXJ2ZXItd2l0aC11ZncpW1Byb3RlY3QgcHJvZHVjdGlvbiBkYXRhYmFzZXNdKC9kb2NzL3NvbHV0aW9ucy9wcm90ZWN0LXBvc3RncmVzcWwtdW5lbmNyeXB0ZWQtbWFjYm9va3MpW0FjY2VzcyBhIFBpS1ZNXSgvZG9jcy9pbnRlZ3JhdGlvbnMvcGlrdm0pW1NlY3VyZSBleHRlcm5hbCBzZXJ2aWNlc10oL2RvY3MvY29uY2VwdHMvaXAtYmxvY2tsaXN0LXJlbGF5cyktICAgVG9nZ2xlW0p1c3QtaW4tdGltZSBhY2Nlc3NdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2p1c3QtaW4tdGltZS1hY2Nlc3MpXG4tICAgVG9nZ2xlW0F1dG9tYXRpb25dKC9kb2NzL2F1dG9tYXRpb25zKVxuXG4tICAgVG9nZ2xlW0ludGVncmF0aW9uc10oL2RvY3MvaW50ZWdyYXRpb25zKVxuXG4tICAgVG9nZ2xlW0Nsb3VkIHNlcnZlcnNdKC9kb2NzL2Nsb3VkLXNlcnZlcilcbi0gICBUb2dnbGVbQ29udGFpbmVycyBhbmQgdmlydHVhbGl6YXRpb25dKC9kb2NzL2NvbnRhaW5lcnMtYW5kLXZpcnR1YWxpemF0aW9uKVxuLSAgIFRvZ2dsZVtTZXJ2ZXJsZXNzIGFwcHNdKC9kb2NzL2ludGVncmF0aW9uLXNlcnZlcmxlc3MtYXBwcylcbi0gICBUb2dnbGVbRGF0YWJhc2VzXSgvZG9jcy9kYXRhYmFzZSlcbi0gICBUb2dnbGVbUmVtb3RlIGVudmlyb25tZW50c10oL2RvY3MvcmVtb3RlLWNvZGUpXG4tICAgVG9nZ2xlW0RldmVsb3BlciB0b29sc10oL2RvY3MvaW50ZWdyYXRpb24tZGV2LXRvb2xzKVxuLSAgIFRvZ2dsZVtGaXJld2FsbHNdKC9kb2NzL2ZpcmV3YWxsKVxuLSAgIFRvZ2dsZVtXZWIgc2VydmVyc10oL2RvY3MvaW50ZWdyYXRpb25zL3dlYi1zZXJ2ZXJzKVxuLSAgIFRvZ2dsZVtOQVNdKC9kb2NzL2ludGVncmF0aW9ucy9uYXMpXG5cbltGQVFdKC9kb2NzL3JlZmVyZW5jZS9mYXEpLSAgIFRvZ2dsZVtMb2dnaW5nLCBTdHJlYW1pbmcsIGFuZCBFdmVudHNdKC9kb2NzL3JlZmVyZW5jZS9sb2dnaW5nLXN0cmVhbWluZy1ldmVudHMpXG5cbltMb2dnaW5nIG92ZXJ2aWV3XSgvZG9jcy9mZWF0dXJlcy9sb2dnaW5nKVtDb25maWd1cmF0aW9uIGF1ZGl0IGxvZ2dpbmddKC9kb2NzL2ZlYXR1cmVzL2xvZ2dpbmcvYXVkaXQtbG9nZ2luZylbTmV0d29yayBmbG93IGxvZ3NdKC9kb2NzL2ZlYXR1cmVzL2xvZ2dpbmcvbmV0d29yay1mbG93LWxvZ3MpW0xvZyBzdHJlYW1pbmddKC9kb2NzL2ZlYXR1cmVzL2xvZ2dpbmcvbG9nLXN0cmVhbWluZyktICAgVG9nZ2xlW1NTSCBzZXNzaW9uIHJlY29yZGluZ10oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLXNzaC90YWlsc2NhbGUtc3NoLXNlc3Npb24tcmVjb3JkaW5nKVxuW0NsaWVudCBtZXRyaWNzXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWNsaWVudC1tZXRyaWNzKVtXZWJob29rc10oL2RvY3MvZmVhdHVyZXMvd2ViaG9va3MpXG5cbi0gICBUb2dnbGVbTWFuYWdlIFlvdXIgT3JnYW5pemF0aW9uXSgvZG9jcy9hY2NvdW50KVxuXG5bQ29udGFjdCBwcmVmZXJlbmNlc10oL2RvY3MvcmVmZXJlbmNlL2NvbnRhY3QtcHJlZmVyZW5jZXMpLSAgIFRvZ2dsZVtQcmljaW5nIGFuZCBiaWxsaW5nXSgvZG9jcy9hY2NvdW50L2JpbGxpbmcpXG5bVGFpbG5ldCBuYW1lXSgvZG9jcy9jb25jZXB0cy90YWlsbmV0LW5hbWUpW0RvbWFpbiBvd25lcnNoaXBdKC9kb2NzL2NvbmNlcHRzL2RvbWFpbi1vd25lcnNoaXApXG5cbi0gICBUb2dnbGVbUmVmZXJlbmNlXSgvZG9jcy9yZWZlcmVuY2UpXG5cbi0gICBUb2dnbGVbVGFpbG5ldCBwb2xpY3kgZmlsZSBzeW50YXhdKC9kb2NzL3JlZmVyZW5jZS9zeW50YXgvcG9saWN5LWZpbGUpXG5bQUNMIGV4YW1wbGVzXSgvZG9jcy9yZWZlcmVuY2UvZXhhbXBsZXMvYWNscylbR3JhbnQgZXhhbXBsZXNdKC9kb2NzL3JlZmVyZW5jZS9leGFtcGxlcy9ncmFudHMpLSAgIFRvZ2dsZVtDTEldKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtY2xpKVxuLSAgIFRvZ2dsZVtBUEldKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtYXBpKVxuW0tleSBwcmVmaXhlc10oL2RvY3MvcmVmZXJlbmNlL2tleS1wcmVmaXhlcyktICAgVG9nZ2xlW1Byb2R1Y3Rpb24gYmVzdCBwcmFjdGljZXNdKC9kb2NzL3JlZmVyZW5jZS9iZXN0LXByYWN0aWNlcy9wcm9kdWN0aW9uKVxuW1NoYXJlZCByZXNwb25zaWJpbGl0eV0oL2RvY3MvY29uY2VwdHMvc2hhcmVkLXJlc3BvbnNpYmlsaXR5KS0gICBUb2dnbGVbVGVjaG5pY2FsIG92ZXJ2aWV3c10oL2RvY3MvY29uY2VwdHMpXG4tICAgVG9nZ2xlW1Rlcm1pbm9sb2d5IGFuZCBjb25jZXB0c10oL2RvY3MvcmVmZXJlbmNlL2dsb3NzYXJ5KVxuW1RhaWxzY2FsZSBtZXNzYWdlc10oL2RvY3MvcmVmZXJlbmNlL21lc3NhZ2VzKVtHaXRIdWIg4oaXXShodHRwczovL2dpdGh1Yi5jb20vdGFpbHNjYWxlL3RhaWxzY2FsZSlcblxuLSAgIFRvZ2dsZVtHZXQgU3VwcG9ydF0oL2RvY3Mvc3VwcG9ydClcblxuLSAgIFRvZ2dsZVtUcm91Ymxlc2hvb3RpbmddKC9kb2NzL3JlZmVyZW5jZS90cm91Ymxlc2hvb3RpbmcpXG5bU3VwcG9ydCBvcHRpb25zXSgvZG9jcy9yZWZlcmVuY2Uvc3VwcG9ydC1vcHRpb25zKVtDb250YWN0IHN1cHBvcnQg4oaXXSgvY29udGFjdC9zdXBwb3J0KVtHZW5lcmF0ZSBhIGJ1ZyByZXBvcnRdKC9kb2NzL2FjY291bnQvYnVnLXJlcG9ydClcblxuLSAgIFRvZ2dsZVtSZXNvdXJjZXNdKC9kb2NzL3Jlc291cmNlcylcblxuW0NoYW5nZWxvZyDihpddKC9jaGFuZ2Vsb2cpW0NvbXBhcmlzb25zIOKGl10oL2NvbXBhcmUpW1JlbGVhc2Ugc3RhZ2VzXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLXJlbGVhc2Utc3RhZ2VzKVtTZWN1cml0eSDihpddKC9zZWN1cml0eSlbVGFpbHNjYWxlIENvbW11bml0eSBQcm9qZWN0c10oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1jb21tdW5pdHktcHJvamVjdHMpLSAgIFRvZ2dsZVtWZXJzaW9uc10oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1jbGllbnQtdmVyc2lvbnMpXG5bVXNlIGNhc2VzXSgvZG9jcy91c2UtY2FzZXMpW0ludml0ZSBvbmx5IGZlYXR1cmVzXSgvZG9jcy9yZWZlcmVuY2UvaW52aXRlLW9ubHktZmVhdHVyZSlbRmVlZGJhY2sg4oaXXSgvZmVlZGJhY2spXG5cbjEuICBbRG9jc10oL2RvY3Mp4oC6XG4yLiAgRmVhdHVyZXPigLpcbjMuICBBcGVydHVyZSBieSBUYWlsc2NhbGVcblxuIyMjIERvY3VtZW50YXRpb25cblxuQ2xvc2UgbmF2aWdhdGlvblxuXG4tICAgVG9nZ2xlW1N0YXJ0XSgvZG9jcy9pbnN0YWxsL3N0YXJ0KVxuXG5bUXVpY2tzdGFydF0oL2RvY3MvaG93LXRvL3F1aWNrc3RhcnQpLSAgIFRvZ2dsZVtJbnN0YWxsIFRhaWxzY2FsZV0oL2RvY3MvaW5zdGFsbClcbi0gICBUb2dnbGVbUXVpY2sgZ3VpZGVzXSgvZG9jcy9xdWljay1ndWlkZXMpXG5bT3BlblZQTiBtaWdyYXRpb24gZ3VpZGVdKC9kb2NzL3NvbHV0aW9ucy9taWdyYXRlLW9wZW52cG4tdGFpbHNjYWxlKVtMZWdhY3kgVlBOIG1pZ3JhdGlvbiBndWlkZV0oL2RvY3Mvc29sdXRpb25zL21pZ3JhdGUtbGVnYWN5LXZwbi10YWlsc2NhbGUpLSAgIFRvZ2dsZVtTZXQgdXAgYW4gaWRlbnRpdHkgcHJvdmlkZXJdKC9kb2NzL2ludGVncmF0aW9ucy9pZGVudGl0eSlcbltXaGF0IGlzIFRhaWxzY2FsZT9dKC9kb2NzL2NvbmNlcHRzL3doYXQtaXMtdGFpbHNjYWxlKVxuXG4tICAgVG9nZ2xlW01hbmFnZSBBY2Nlc3NdKC9kb2NzL21hbmFnZSlcblxuLSAgIFRvZ2dsZVtNYW5hZ2UgYWNjZXNzIGNvbnRyb2xdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sKVxuLSAgIFRvZ2dsZVtNYW5hZ2UganVzdC1pbi10aW1lIGFjY2Vzc10oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wvanVzdC1pbi10aW1lLWFjY2Vzcylcbi0gICBUb2dnbGVbTWFuYWdlIGRldmljZXNdKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2RldmljZS1tYW5hZ2VtZW50KVxuLSAgIFRvZ2dsZVtNYW5hZ2UgdXNlcnNdKC9kb2NzL21hbmFnZS11c2VycylcbltUYWlsbmV0IExvY2tdKC9kb2NzL2ZlYXR1cmVzL3RhaWxuZXQtbG9jaylcblxuLSAgIFRvZ2dsZVtSb3V0ZSBUcmFmZmljXSgvZG9jcy9yb3V0ZSlcblxuLSAgIFRvZ2dsZVtTZXQgdXAgYSBzdWJuZXQgcm91dGVyXSgvZG9jcy9mZWF0dXJlcy9zdWJuZXQtcm91dGVycylcbi0gICBUb2dnbGVbU2V0IHVwIGFuIGV4aXQgbm9kZV0oL2RvY3MvZmVhdHVyZXMvZXhpdC1ub2Rlcylcbi0gICBUb2dnbGVbU2V0IHVwIGFuIGFwcCBjb25uZWN0b3JdKC9kb2NzL2ZlYXR1cmVzL2FwcC1jb25uZWN0b3JzL2hvdy10by9zZXR1cClcbi0gICBUb2dnbGVbVXNlIEROU10oL2RvY3MvcmVmZXJlbmNlL2Rucy1pbi10YWlsc2NhbGUpXG5bU2V0IHVwIE1hZ2ljRE5TXSgvZG9jcy9mZWF0dXJlcy9tYWdpY2RucylbU2V0IHVwIGhpZ2ggYXZhaWxhYmlsaXR5XSgvZG9jcy9ob3ctdG8vc2V0LXVwLWhpZ2gtYXZhaWxhYmlsaXR5KVxuXG4tICAgVG9nZ2xlW1NldCBVcCBTZXJ2ZXJzXSgvZG9jcy9zZXJ2ZXJzKVxuXG5bU2V0IHVwIGEgc2VydmVyXSgvZG9jcy9ob3ctdG8vc2V0LXVwLXNlcnZlcnMpW1VzZSB0YWdzXSgvZG9jcy9mZWF0dXJlcy90YWdzKVtJbnN0YWxsIFRhaWxzY2FsZSB3aXRoIGNsb3VkLWluaXRdKC9kb2NzL2luc3RhbGwvd2l0aC1jbG91ZC1pbml0KVtVc2UgYXV0aCBrZXlzXSgvZG9jcy9mZWF0dXJlcy9hY2Nlc3MtY29udHJvbC9hdXRoLWtleXMpW0F1dG9tYXRlIGtleSBleHBpcnldKC9kb2NzL2ZlYXR1cmVzL2FjY2Vzcy1jb250cm9sL2tleS1leHBpcnkpLSAgIFRvZ2dsZVtVc2UgVGFpbHNjYWxlIFNTSF0oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLXNzaClcbltTZXQgdXAgSFRUUFMgY2VydGlmaWNhdGVzXSgvZG9jcy9ob3ctdG8vc2V0LXVwLWh0dHBzLWNlcnRpZmljYXRlcylbUnVuIGFuIGVwaGVtZXJhbCBub2RlXSgvZG9jcy9mZWF0dXJlcy9lcGhlbWVyYWwtbm9kZXMpW1J1biB1bmF0dGVuZGVkXSgvZG9jcy9ob3ctdG8vcnVuLXVuYXR0ZW5kZWQpXG5cbi0gICBUb2dnbGVbQWNjZXNzICYgU2hhcmUgU2VydmljZXNdKC9kb2NzL3NoYXJlKVxuXG5bVGFpbHNjYWxlIHNlcnZpY2VzXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtc2VydmljZXMpW0VuZHBvaW50IGNvbGxlY3Rpb25dKC9kb2NzL2ZlYXR1cmVzL3NlcnZpY2VzKVtTaGFyZSBub2Rlc10oL2RvY3MvZmVhdHVyZXMvc2hhcmluZyktICAgVG9nZ2xlW1VzZSBUYWlsZHJvcF0oL2RvY3MvZmVhdHVyZXMvdGFpbGRyb3ApXG5cbi0gICBUb2dnbGVbU2hhcmUgYSB3ZWIgc2VydmVyXSgvZG9jcy9zaGFyZS13ZWItc2VydmVyKVxuXG4tICAgVG9nZ2xlW1RhaWxzY2FsZSBGdW5uZWxdKC9kb2NzL2ZlYXR1cmVzL3RhaWxzY2FsZS1mdW5uZWwpXG4tICAgVG9nZ2xlW1RhaWxzY2FsZSBTZXJ2ZV0oL2RvY3MvZmVhdHVyZXMvdGFpbHNjYWxlLXNlcnZlKVxuXG4tICAgVG9nZ2xlW1NvbHV0aW9uc10oL2RvY3Mvc29sdXRpb25zKVxuXG5bU2VjdXJlIHRyYWZmaWMgd2l0aCBBcHBsZSBUVl0oL2RvY3Mvc29sdXRpb25zL3NlY3VyZS10cmFmZmljLXB1YmxpYy13aWZpLWFwcGxldHYpW1NlY3VyZSBHaXRIdWIgQWN0aW9ucyBydW5uZXJzXSgvZG9jcy9zb2x1dGlvbnMvY29ubmVjdC1naXRodWItQ0lDRC13b3JrZmxvd3MtdG8tcHJpdmF0ZS1pbmZyYXN0cnVjdHVyZS13aXRob3V0LXB1YmxpYy1leHBvc3VyZSlbQmxvY2sgYWRzIHdpdGggYSBSYXNwYmVycnkgUGldKC9kb2NzL3NvbHV0aW9ucy9ibG9jay1hZHMtYWxsLWRldmljZXMtYW55d2hlcmUtdXNpbmctcmFzcGJlcnJ5LXBpKVtBY2Nlc3MgcmVtb3RlIGRlc2t0b3BzIHdpdGggV2luZG93cyBSRFBdKC9kb2NzL3NvbHV0aW9ucy9hY2Nlc3MtcmVtb3RlLWRlc2t0b3BzLXVzaW5nLXdpbmRvd3MtcmRwKVtBY2Nlc3MgcmVtb3RlIGRlc2t0b3BzIHdpdGggUnVzdERlc2tdKC9kb2NzL3NvbHV0aW9ucy9hY2Nlc3MtcmVtb3RlLWRlc2t0b3BzLXdpdGgtcnVzdGRlc2spW0Nvbm5lY3QgdG8gTW9uZ29EQiBBdGxhc10oL2RvY3Mvc29sdXRpb25zL2NyZWF0ZS1hLXNlY3VyZS1jb25uZWN0aW9uLXRvLW1vbmdvZGItYXRsYXMpW0NvZGUgZnJvbSB5b3VyIGlQYWRdKC9kb2NzL3NvbHV0aW9ucy9jb2RlLW9uLWlwYWQtdnNjb2RlLWNhZGR5LWNvZGUtc2VydmVyKVtMb2NrIGRvd24gYSBzZXJ2ZXJdKC9kb2NzL2hvdy10by9zZWN1cmUtdWJ1bnR1LXNlcnZlci13aXRoLXVmdylbUHJvdGVjdCBwcm9kdWN0aW9uIGRhdGFiYXNlc10oL2RvY3Mvc29sdXRpb25zL3Byb3RlY3QtcG9zdGdyZXNxbC11bmVuY3J5cHRlZC1tYWNib29rcylbQWNjZXNzIGEgUGlLVk1dKC9kb2NzL2ludGVncmF0aW9ucy9waWt2bSlbU2VjdXJlIGV4dGVybmFsIHNlcnZpY2VzXSgvZG9jcy9jb25jZXB0cy9pcC1ibG9ja2xpc3QtcmVsYXlzKS0gICBUb2dnbGVbSnVzdC1pbi10aW1lIGFjY2Vzc10oL2RvY3MvZmVhdHVyZXMvYWNjZXNzLWNvbnRyb2wvanVzdC1pbi10aW1lLWFjY2Vzcylcbi0gICBUb2dnbGVbQXV0b21hdGlvbl0oL2RvY3MvYXV0b21hdGlvbnMpXG5cbi0gICBUb2dnbGVbSW50ZWdyYXRpb25zXSgvZG9jcy9pbnRlZ3JhdGlvbnMpXG5cbi0gICBUb2dnbGVbQ2xvdWQgc2VydmVyc10oL2RvY3MvY2xvdWQtc2VydmVyKVxuLSAgIFRvZ2dsZVtDb250YWluZXJzIGFuZCB2aXJ0dWFsaXphdGlvbl0oL2RvY3MvY29udGFpbmVycy1hbmQtdmlydHVhbGl6YXRpb24pXG4tICAgVG9nZ2xlW1NlcnZlcmxlc3MgYXBwc10oL2RvY3MvaW50ZWdyYXRpb24tc2VydmVybGVzcy1hcHBzKVxuLSAgIFRvZ2dsZVtEYXRhYmFzZXNdKC9kb2NzL2RhdGFiYXNlKVxuLSAgIFRvZ2dsZVtSZW1vdGUgZW52aXJvbm1lbnRzXSgvZG9jcy9yZW1vdGUtY29kZSlcbi0gICBUb2dnbGVbRGV2ZWxvcGVyIHRvb2xzXSgvZG9jcy9pbnRlZ3JhdGlvbi1kZXYtdG9vbHMpXG4tICAgVG9nZ2xlW0ZpcmV3YWxsc10oL2RvY3MvZmlyZXdhbGwpXG4tICAgVG9nZ2xlW1dlYiBzZXJ2ZXJzXSgvZG9jcy9pbnRlZ3JhdGlvbnMvd2ViLXNlcnZlcnMpXG4tICAgVG9nZ2xlW05BU10oL2RvY3MvaW50ZWdyYXRpb25zL25hcylcblxuW0ZBUV0oL2RvY3MvcmVmZXJlbmNlL2ZhcSktICAgVG9nZ2xlW0xvZ2dpbmcsIFN0cmVhbWluZywgYW5kIEV2ZW50c10oL2RvY3MvcmVmZXJlbmNlL2xvZ2dpbmctc3RyZWFtaW5nLWV2ZW50cylcblxuW0xvZ2dpbmcgb3ZlcnZpZXddKC9kb2NzL2ZlYXR1cmVzL2xvZ2dpbmcpW0NvbmZpZ3VyYXRpb24gYXVkaXQgbG9nZ2luZ10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZy9hdWRpdC1sb2dnaW5nKVtOZXR3b3JrIGZsb3cgbG9nc10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZy9uZXR3b3JrLWZsb3ctbG9ncylbTG9nIHN0cmVhbWluZ10oL2RvY3MvZmVhdHVyZXMvbG9nZ2luZy9sb2ctc3RyZWFtaW5nKS0gICBUb2dnbGVbU1NIIHNlc3Npb24gcmVjb3JkaW5nXSgvZG9jcy9mZWF0dXJlcy90YWlsc2NhbGUtc3NoL3RhaWxzY2FsZS1zc2gtc2Vzc2lvbi1yZWNvcmRpbmcpXG5bQ2xpZW50IG1ldHJpY3NdKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtY2xpZW50LW1ldHJpY3MpW1dlYmhvb2tzXSgvZG9jcy9mZWF0dXJlcy93ZWJob29rcylcblxuLSAgIFRvZ2dsZVtNYW5hZ2UgWW91ciBPcmdhbml6YXRpb25dKC9kb2NzL2FjY291bnQpXG5cbltDb250YWN0IHByZWZlcmVuY2VzXSgvZG9jcy9yZWZlcmVuY2UvY29udGFjdC1wcmVmZXJlbmNlcyktICAgVG9nZ2xlW1ByaWNpbmcgYW5kIGJpbGxpbmddKC9kb2NzL2FjY291bnQvYmlsbGluZylcbltUYWlsbmV0IG5hbWVdKC9kb2NzL2NvbmNlcHRzL3RhaWxuZXQtbmFtZSlbRG9tYWluIG93bmVyc2hpcF0oL2RvY3MvY29uY2VwdHMvZG9tYWluLW93bmVyc2hpcClcblxuLSAgIFRvZ2dsZVtSZWZlcmVuY2VdKC9kb2NzL3JlZmVyZW5jZSlcblxuLSAgIFRvZ2dsZVtUYWlsbmV0IHBvbGljeSBmaWxlIHN5bnRheF0oL2RvY3MvcmVmZXJlbmNlL3N5bnRheC9wb2xpY3ktZmlsZSlcbltBQ0wgZXhhbXBsZXNdKC9kb2NzL3JlZmVyZW5jZS9leGFtcGxlcy9hY2xzKVtHcmFudCBleGFtcGxlc10oL2RvY3MvcmVmZXJlbmNlL2V4YW1wbGVzL2dyYW50cyktICAgVG9nZ2xlW0NMSV0oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1jbGkpXG4tICAgVG9nZ2xlW0FQSV0oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1hcGkpXG5bS2V5IHByZWZpeGVzXSgvZG9jcy9yZWZlcmVuY2Uva2V5LXByZWZpeGVzKS0gICBUb2dnbGVbUHJvZHVjdGlvbiBiZXN0IHByYWN0aWNlc10oL2RvY3MvcmVmZXJlbmNlL2Jlc3QtcHJhY3RpY2VzL3Byb2R1Y3Rpb24pXG5bU2hhcmVkIHJlc3BvbnNpYmlsaXR5XSgvZG9jcy9jb25jZXB0cy9zaGFyZWQtcmVzcG9uc2liaWxpdHkpLSAgIFRvZ2dsZVtUZWNobmljYWwgb3ZlcnZpZXdzXSgvZG9jcy9jb25jZXB0cylcbi0gICBUb2dnbGVbVGVybWlub2xvZ3kgYW5kIGNvbmNlcHRzXSgvZG9jcy9yZWZlcmVuY2UvZ2xvc3NhcnkpXG5bVGFpbHNjYWxlIG1lc3NhZ2VzXSgvZG9jcy9yZWZlcmVuY2UvbWVzc2FnZXMpW0dpdEh1YiDihpddKGh0dHBzOi8vZ2l0aHViLmNvbS90YWlsc2NhbGUvdGFpbHNjYWxlKVxuXG4tICAgVG9nZ2xlW0dldCBTdXBwb3J0XSgvZG9jcy9zdXBwb3J0KVxuXG4tICAgVG9nZ2xlW1Ryb3VibGVzaG9vdGluZ10oL2RvY3MvcmVmZXJlbmNlL3Ryb3VibGVzaG9vdGluZylcbltTdXBwb3J0IG9wdGlvbnNdKC9kb2NzL3JlZmVyZW5jZS9zdXBwb3J0LW9wdGlvbnMpW0NvbnRhY3Qgc3VwcG9ydCDihpddKC9jb250YWN0L3N1cHBvcnQpW0dlbmVyYXRlIGEgYnVnIHJlcG9ydF0oL2RvY3MvYWNjb3VudC9idWctcmVwb3J0KVxuXG4tICAgVG9nZ2xlW1Jlc291cmNlc10oL2RvY3MvcmVzb3VyY2VzKVxuXG5bQ2hhbmdlbG9nIOKGl10oL2NoYW5nZWxvZylbQ29tcGFyaXNvbnMg4oaXXSgvY29tcGFyZSlbUmVsZWFzZSBzdGFnZXNdKC9kb2NzL3JlZmVyZW5jZS90YWlsc2NhbGUtcmVsZWFzZS1zdGFnZXMpW1NlY3VyaXR5IOKGl10oL3NlY3VyaXR5KVtUYWlsc2NhbGUgQ29tbXVuaXR5IFByb2plY3RzXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWNvbW11bml0eS1wcm9qZWN0cyktICAgVG9nZ2xlW1ZlcnNpb25zXSgvZG9jcy9yZWZlcmVuY2UvdGFpbHNjYWxlLWNsaWVudC12ZXJzaW9ucylcbltVc2UgY2FzZXNdKC9kb2NzL3VzZS1jYXNlcylbSW52aXRlIG9ubHkgZmVhdHVyZXNdKC9kb2NzL3JlZmVyZW5jZS9pbnZpdGUtb25seS1mZWF0dXJlKVtGZWVkYmFjayDihpddKC9mZWVkYmFjaylcblxuIyBBcGVydHVyZSBieSBUYWlsc2NhbGVcblxuTGFzdCB2YWxpZGF0ZWQ6IEZlYiAxNSwgMjAyNlxuXG5BcGVydHVyZSBieSBUYWlsc2NhbGUgaXMgY3VycmVudGx5IFtpbiBhbHBoYV0oL2RvY3MvcmVmZXJlbmNlL3RhaWxzY2FsZS1yZWxlYXNlLXN0YWdlcyNhbHBoYSkuXG5cbkR1cmluZyB0aGUgYWxwaGEgdGVzdGluZyBwZXJpb2QsIEFwZXJ0dXJlIGJ5IFRhaWxzY2FsZSBpcyBhdmFpbGFibGUgYXQgbm8gYWRkaXRpb25hbCBjb3N0IGFjcm9zcyBbYWxsIFRhaWxzY2FsZSBwbGFuc10oL3ByaWNpbmcpLiBSZXF1ZXN0IGFjY2VzcyBhdCBbYGFwZXJ0dXJlLnRhaWxzY2FsZS5jb21gXShodHRwczovL2FwZXJ0dXJlLnRhaWxzY2FsZS5jb20pLlxuXG5MaWtlIHRoZSBUYWlsc2NhbGUgUGVyc29uYWwgcGxhbiwgQXBlcnR1cmUgYnkgVGFpbHNjYWxlIGNvbWVzIHdpdGggc2ltaWxhciB1c2FnZSBsaW1pdHMgb2YgdGhyZWUgZnJlZSB1c2Vycy4gQ29udGFjdCB1cyBmb3IgcHJpY2luZyBpZiB5b3UgbmVlZCBtb3JlIHRoYW4gdGhyZWUgdXNlcnMuXG5cbkFzIG9yZ2FuaXphdGlvbnMgYWRvcHQgQUkgYWNyb3NzIGRldmVsb3BtZW50LCBhdXRvbWF0aW9uLCBhbmQgaW50ZXJuYWwgdG9vbHMsIHRoZXkgZmFjZSBuZXcgY2hhbGxlbmdlcyBhcm91bmQgc2VjdXJpdHksIHZpc2liaWxpdHksIGFuZCBjb250cm9sLiBBUEkga2V5cyBhcmUgb2Z0ZW4gc2NhdHRlcmVkIGFjcm9zcyBkZXZlbG9wZXIgbWFjaGluZXMsIENJIHN5c3RlbXMsIGFuZCBhdXRvbWF0ZWQgYWdlbnRzLCBpbmNyZWFzaW5nIHRoZSByaXNrIG9mIGxlYWtzIGFuZCBtYWtpbmcgY3JlZGVudGlhbHMgaGFyZCB0byByb3RhdGUgb3IgYXVkaXQuIEF0IHRoZSBzYW1lIHRpbWUsIHRlYW1zIGxhY2sgY2xlYXIgaW5zaWdodCBpbnRvIHdobyBpcyB1c2luZyB3aGljaCBtb2RlbHMsIGhvdyBmcmVxdWVudGx5IHRoZXkgYXJlIHVzZWQsIGFuZCB3aGF0IHRob3NlIGludGVyYWN0aW9ucyBjb3N0LiBUaGlzIG1ha2VzIGl0IGRpZmZpY3VsdCBmb3Igc2VjdXJpdHksIHBsYXRmb3JtLCBhbmQgY29tcGxpYW5jZSB0ZWFtcyB0byBzdXBwb3J0IEFJIHVzYWdlIGF0IHNjYWxlIHdpdGhvdXQgc2xvd2luZyBkZXZlbG9wZXJzIGRvd24uXG5cbkFwZXJ0dXJlIGJ5IFRhaWxzY2FsZSBhZGRyZXNzZXMgdGhlc2UgY2hhbGxlbmdlcyBieSBwcm92aWRpbmcgYSBjZW50cmFsaXplZCBBSSBnYXRld2F5IGluc2lkZSBhIFRhaWxzY2FsZSBuZXR3b3JrLCBvciB0YWlsbmV0LiBJbnN0ZWFkIG9mIGRpc3RyaWJ1dGluZyBBUEkga2V5cywgdXNlcnMgYW5kIGF1dG9tYXRlZCBhZ2VudHMgYXV0aGVudGljYXRlIHVzaW5nIHRoZWlyIGV4aXN0aW5nIFRhaWxzY2FsZSBpZGVudGl0eS4gQXBlcnR1cmUgc2VjdXJlbHkgaW5qZWN0cyBwcm92aWRlciBjcmVkZW50aWFscyBvbiB0aGVpciBiZWhhbGYgYW5kIHJvdXRlcyByZXF1ZXN0cyB0byBtdWx0aXBsZSB1cHN0cmVhbSBMTE0gcHJvdmlkZXJzIHN1Y2ggYXMgT3BlbkFJLCBBbnRocm9waWMsIGFuZCBHb29nbGUsIHdpdGhvdXQgcmVxdWlyaW5nIGNoYW5nZXMgdG8gZXhpc3RpbmcgdG9vbHMgb3Igd29ya2Zsb3dzLlxuXG5CZWNhdXNlIGFsbCBBSSByZXF1ZXN0cyBmbG93IHRocm91Z2ggQXBlcnR1cmUsIG9yZ2FuaXphdGlvbnMgZ2FpbiBjb25zaXN0ZW50IHZpc2liaWxpdHkgaW50byBBSSB1c2FnZS4gQXBlcnR1cmUgY2FwdHVyZXMgdGVsZW1ldHJ5LCB0cmFja3Mgc2Vzc2lvbnMsIGFuZCBleHRyYWN0cyB1c2VmdWwgbWV0YWRhdGEgc3VjaCBhcyB0b2tlbiB1c2FnZSBhbmQgdG9vbCBjYWxscy4gVGhpcyBlbmFibGVzIGF1ZGl0aW5nLCBjb3N0IGF3YXJlbmVzcywgYW5kIG9wZXJhdGlvbmFsIGluc2lnaHQsIHdoaWxlIGFsbG93aW5nIHRlYW1zIHRvIHNhZmVseSBhZG9wdCBBSSB0b29scyBhbmQgYWdlbnRzIHdpdGggdGhlIHNhbWUgaWRlbnRpdHksIGFjY2VzcywgYW5kIG9ic2VydmFiaWxpdHkgcHJpbmNpcGxlcyB0aGV5IGFscmVhZHkgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGVpciBpbmZyYXN0cnVjdHVyZS5cblxuUmVmZXIgdG8gdGhlIFtBcGVydHVyZSBieSBUYWlsc2NhbGUgY29uZmlndXJhdGlvbiByZWZlcmVuY2VdKC9kb2NzL2ZlYXR1cmVzL2FwZXJ0dXJlL2NvbmZpZ3VyYXRpb24pIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgYXZhaWxhYmxlIHNldHRpbmdzLlxuXG4jIyBbUmVxdWlyZW1lbnRzXSgjcmVxdWlyZW1lbnRzKVxuXG5CZWZvcmUgZGVwbG95aW5nIEFwZXJ0dXJlLCBlbnN1cmUgeW91ciBlbnZpcm9ubWVudCBtZWV0cyB0aGVzZSByZXF1aXJlbWVudHMuXG5cbi0gICAqKkEgVGFpbHNjYWxlIG5ldHdvcmsqKlxuICAgIFxuICAgIEFwZXJ0dXJlIHJ1bnMgZXhjbHVzaXZlbHkgb24gdGFpbG5ldHMuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBiZWNhdXNlIHRoZSBlbnRpcmUgYXV0aGVudGljYXRpb24gbW9kZWwgZGVwZW5kcyBvbiBUYWlsc2NhbGUgaWRlbnRpdHkuXG4gICAgXG4gICAgVXNlciBpZGVudGl0eSBjb21lcyBhdXRvbWF0aWNhbGx5IGZyb20gdGFpbG5ldCBtZW1iZXJzaGlwLiBXaGVuIGEgY2xpZW50IGNvbm5lY3RzIHRvIEFwZXJ0dXJlLCB0aGUgcHJveHkgcXVlcmllcyBUYWlsc2NhbGUgdG8gaWRlbnRpZnkgdGhlIHVzZXIgYnkgdGhlaXIgbG9naW4gbmFtZSBhbmQgZGV2aWNlLiBUaGlzIGVuYWJsZXMgQVBJIGFjY2VzcyB3aXRob3V0IHNoYXJpbmcga2V5cyB3aXRoIHVzZXJzIGJlY2F1c2UgQXBlcnR1cmUgY2VudHJhbGx5IG1hbmFnZXMgdGhlbSBhbmQgaW5qZWN0cyB0aGVtIHdoZW4gZm9yd2FyZGluZyByZXF1ZXN0cy5cbiAgICBcbiAgICBJZiB5b3VyIG9yZ2FuaXphdGlvbiBkb2VzIG5vdCB1c2UgVGFpbHNjYWxlLCBBcGVydHVyZSB3aWxsIG5vdCB3b3JrIGZvciB5b3UuIEJ1dCB5b3UgY2FuIFtjb25maWd1cmUgQXBlcnR1cmUgdG8gbW9uaXRvciBkZXZpY2VzIG91dHNpZGUgdGhlIHRhaWxuZXRdKCNtb25pdG9yLXNlc3Npb25zLW9uLWEtZGV2aWNlLW91dHNpZGUtdGhlLXRhaWxuZXQpLlxuICAgIFxuLSAgICoqT25lIG9yIG1vcmUgTExNIHByb3ZpZGVyIGFjY291bnRzKipcbiAgICBcbiAgICBZb3UgbmVlZCBBUEkga2V5cyBmb3IgYW55IExMTSBwcm92aWRlcnMgdG8gcm91dGUgdGhyb3VnaCBBcGVydHVyZS4gQXBlcnR1cmUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwcm92aWRlcnM6XG4gICAgXG4gICAgLSAgIE9wZW5BSSAoR1BULTRvLCBvMSwgbzMtbWluaSwgYW5kIG90aGVyIG1vZGVscylcbiAgICAtICAgQW50aHJvcGljIChDbGF1ZGUgU29ubmV0LCBDbGF1ZGUgT3B1cywgYW5kIG90aGVyIG1vZGVscylcbiAgICAtICAgR29vZ2xlIChHZW1pbmkgbW9kZWxzKVxuICAgIC0gICBPcGVuUm91dGVyIChwcm92aWRlcyBhY2Nlc3MgdG8gb3BlbiBzb3VyY2UgbW9kZWxzIHN1Y2ggYXMgRGVlcFNlZWssIFF3ZW4sIGFuZCBvdGhlcnMpXG4gICAgLSAgIE9wZW5BSS1jb21wYXRpYmxlIEFQSXMgKGZvciBleGFtcGxlLCBsbGFtYS5jcHAgYW5kIG90aGVyIHNlbGYtaG9zdGVkIGVuZHBvaW50cylcblxuIyMgW1VzZSBjYXNlc10oI3VzZS1jYXNlcylcblxuQXBlcnR1cmUgYWRkcmVzc2VzIHNldmVyYWwgY29tbW9uIGNoYWxsZW5nZXMgb3JnYW5pemF0aW9ucyBmYWNlIHdoZW4gYWRvcHRpbmcgTExNIHRvb2xzLlxuXG4tICAgKipDZW50cmFsaXplZCBBUEkga2V5IG1hbmFnZW1lbnQqKlxuICAgIFxuICAgIERpc3RyaWJ1dGluZyBBUEkga2V5cyB0byBkZXZlbG9wZXJzIGNyZWF0ZXMgc2VjdXJpdHkgcmlza3MgYW5kIGFuIGFkbWluaXN0cmF0aXZlIGJ1cmRlbi4gS2V5cyBnZXQgY29tbWl0dGVkIHRvIHJlcG9zaXRvcmllcywgc2hhcmVkIGluc2VjdXJlbHksIG9yIGZvcmdvdHRlbiB3aGVuIGVtcGxveWVlcyBsZWF2ZS5cbiAgICBcbiAgICBBcGVydHVyZSBjZW50cmFsaXplcyBBUEkga2V5cyBpbiBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gQ2xpZW50cyBjb25uZWN0IHRocm91Z2ggdGhlIHByb3h5IHdpdGhvdXQgbmVlZGluZyBwcm92aWRlciBjcmVkZW50aWFscy4gVXNlciBpZGVudGl0eSBjb21lcyBmcm9tIHRhaWxuZXQgbWVtYmVyc2hpcC5cbiAgICBcbi0gICAqKlZpc2liaWxpdHkgaW50byBMTE0gdXNhZ2UqKlxuICAgIFxuICAgIEVuZ2luZWVyaW5nIHRlYW1zIGFkb3B0IExMTS1wb3dlcmVkIHRvb2xzIHdpdGhvdXQgY2VudHJhbGl6ZWQgdHJhY2tpbmcuIEluZGl2aWR1YWwgZGV2ZWxvcGVycyB1c2UgZGlmZmVyZW50IHByb3ZpZGVycywgbW9kZWxzLCBhbmQgdG9vbHMuIFdpdGhvdXQgYWdncmVnYXRpb24sIG9yZ2FuaXphdGlvbnMgY2Fubm90IGFuc3dlciBxdWVzdGlvbnMgc3VjaCBhczpcbiAgICBcbiAgICAtICAgSG93IG1hbnkgdG9rZW5zIGRpZCB3ZSB1c2UgbGFzdCBtb250aD9cbiAgICAtICAgV2hpY2ggbW9kZWxzIGFyZSB0ZWFtcyB1c2luZz9cbiAgICAtICAgV2hhdCBkb2VzIHRoZSBicmVha2Rvd24gb2Ygb3VyIExMTSBzcGVuZCBsb29rIGxpa2U/XG4gICAgXG4gICAgQXBlcnR1cmUgY2FwdHVyZXMgZXZlcnkgcmVxdWVzdCB3aXRoIHVzZXIgYXR0cmlidXRpb24sIG1vZGVsIGlkZW50aWZpY2F0aW9uLCBhbmQgdG9rZW4gY291bnRzLiBUaGUgZGFzaGJvYXJkIGFnZ3JlZ2F0ZXMgdGhpcyBkYXRhIGJ5IHVzZXIsIG1vZGVsLCBhbmQgdGltZSBwZXJpb2QuXG4gICAgXG4tICAgKipBZG9wdGlvbiBhbmFseXRpY3MqKlxuICAgIFxuICAgIFBsYXRmb3JtIHRlYW1zIGRlcGxveWluZyBMTE0gdG9vbHMgbmVlZCB0byB1bmRlcnN0YW5kIGFkb3B0aW9uIGFuZCBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6XG4gICAgXG4gICAgLSAgIFdoaWNoIHRlYW1zIGFyZSB1c2luZyB0aGUgdG9vbHM/IEhvdyBmcmVxdWVudGx5P1xuICAgIC0gICBBcmUgdGhlcmUgdXNlcnMgd2hvIHRyaWVkIGEgdG9vbCBvbmUgdGltZSBhbmQgc3RvcHBlZD9cbiAgICBcbiAgICBUaGUgYWRvcHRpb24gZGFzaGJvYXJkIHNob3dzIG9yZ2FuaXphdGlvbi13aWRlIHVzYWdlIHBhdHRlcm5zLCBhY3RpdmUgdXNlcnMgb3ZlciB0aW1lLCBhbmQgdXNhZ2UgZGlzdHJpYnV0aW9uIGhpc3RvZ3JhbXMuXG4gICAgXG4tICAgKipDb3N0IHRyYWNraW5nKipcbiAgICBcbiAgICBMTE0gQVBJIGNvc3RzIHNjYWxlIHdpdGggdG9rZW4gdXNhZ2UsIGJ1dCB0cmFja2luZyBjb25zdW1wdGlvbiBhY3Jvc3MgbXVsdGlwbGUgdG9vbHMgYW5kIHByb3ZpZGVycyByZXF1aXJlcyBhZ2dyZWdhdGluZyBkYXRhIGZyb20gZWFjaCBzb3VyY2UgaW5kaXZpZHVhbGx5LiBEZXZlbG9wZXJzIG1pZ2h0IG5vdCByZWFsaXplIGhvdyBtdWNoIHRoZWlyIHdvcmtmbG93cyBjb3N0LCBhbmQgZmluYW5jZSB0ZWFtcyBsYWNrIHRoZSBkYXRhIHRvIGZvcmVjYXN0IGJ1ZGdldHMuXG4gICAgXG4gICAgQXBlcnR1cmUgZXh0cmFjdHMgdG9rZW4gdXNhZ2UgZnJvbSBldmVyeSByZXNwb25zZSwgaW5jbHVkaW5nIGlucHV0LCBvdXRwdXQsIGNhY2hlZCwgYW5kIHJlYXNvbmluZyB0b2tlbnMuIFRoaXMgZGF0YSBmZWVkcyBpbnRvIGRhc2hib2FyZHMgYW5kIGV4cG9ydHMgZm9yIGNvc3QgYW5hbHlzaXMuXG4gICAgXG4tICAgKipDb21wbGlhbmNlIGFuZCBhdWRpdCB0cmFpbHMqKlxuICAgIFxuICAgIFJlZ3VsYXRlZCBpbmR1c3RyaWVzIHJlcXVpcmUgYXVkaXQgdHJhaWxzIGZvciBBSSBpbnRlcmFjdGlvbnMuIFdoZW4gTExNIHJlcXVlc3RzIGZsb3cgZGlyZWN0bHkgZnJvbSBjbGllbnQgdG8gcHJvdmlkZXIsIG9yZ2FuaXphdGlvbnMgaGF2ZSBubyByZWNvcmQgb2Ygd2hhdCB3YXMgc2VudCBvciByZWNlaXZlZC5cbiAgICBcbiAgICBBcGVydHVyZSBzdG9yZXMgZnVsbCByZXF1ZXN0IGFuZCByZXNwb25zZSBib2RpZXMuIFRoZSBjYXB0dXJlIHN5c3RlbSBwcmVzZXJ2ZXMgaGVhZGVycywgcGF5bG9hZHMsIGFuZCB0b29sIHVzZSBkYXRhLiBFeHBvcnQgbG9ncyBhbmQgZXZlbnRzIHRvIHlvdXIgU0lFTSBmb3IgbW9uaXRvcmluZywgcmV0ZW50aW9uLCBhbmQgY29tcGxpYW5jZSB3b3JrZmxvd3MuIEFwZXJ0dXJlIHN1cHBvcnRzIFMzIGV4cG9ydCwgd2hpY2ggaW50ZWdyYXRlcyB3aXRoIG1vc3Qgc2VjdXJpdHkgYW5kIGNvbXBsaWFuY2UgdG9vbGluZy5cbiAgICBcbi0gICAqKkxMTSBzZXNzaW9uIGRlYnVnZ2luZyoqXG4gICAgXG4gICAgWW91IGNhbiB1c2UgQXBlcnR1cmUgdG8gZGVidWcgTExNIGludGVyYWN0aW9ucyBieSByZXZpZXdpbmcgZnVsbCByZXF1ZXN0IGFuZCByZXNwb25zZSBkYXRhLiBUaGUgKipMb2dzKiogcGFnZSBncm91cHMgcmVsYXRlZCByZXF1ZXN0cyBpbnRvIHNlc3Npb25zLCBsZXR0aW5nIHlvdSB0cmFjZSB0aGUgZmxvdyBvZiBhIGNvbnZlcnNhdGlvbiBvciBjb2RpbmcgdGFzay5cbiAgICBcblxuIyMgW0hvdyBpdCB3b3Jrc10oI2hvdy1pdC13b3JrcylcblxuVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBjb3JlIG1lY2hhbmlzbXMgdGhhdCBwb3dlciBBcGVydHVyZS5cblxuIyMjIFtJZGVudGl0eSB0aHJvdWdoIFRhaWxzY2FsZV0oI2lkZW50aXR5LXRocm91Z2gtdGFpbHNjYWxlKVxuXG5UcmFkaXRpb25hbCBBUEkgcHJveGllcyByZXF1aXJlIGNsaWVudHMgdG8gYXV0aGVudGljYXRlIHdpdGggdG9rZW5zIG9yIEFQSSBrZXlzLiBBcGVydHVyZSBlbGltaW5hdGVzIHRoaXMgc3RlcCBieSB1c2luZyBUYWlsc2NhbGUncyBpZGVudGl0eSBsYXllci5cblxuRXZlcnkgY29ubmVjdGlvbiB0byBhIHRhaWxuZXQgY2FycmllcyBjcnlwdG9ncmFwaGljIHByb29mIG9mIGlkZW50aXR5LiBXaGVuIGEgcmVxdWVzdCBhcnJpdmVzIGF0IEFwZXJ0dXJlLCB0aGUgcHJveHkgcXVlcmllcyBUYWlsc2NhbGUgd2l0aCB0aGUgcmVtb3RlIElQIGFkZHJlc3MuIFRhaWxzY2FsZSByZXNwb25kcyB3aXRoIHRoZSB1c2VyJ3MgbG9naW4gbmFtZSAoZm9yIGV4YW1wbGUsIGBhbGljZUBleGFtcGxlLmNvbWApLCBhIHBlcnNpc3RlbnQgZGV2aWNlIGlkZW50aWZpZXIsIGFuZCBhbnkgdGFncyBhc3NpZ25lZCB0byB0aGF0IGRldmljZS5cblxuVGhpcyBpZGVudGl0eSBpcyB0cnVzdHdvcnRoeSBiZWNhdXNlIGl0IGNvbWVzIGZyb20gVGFpbHNjYWxlJ3MgY29udHJvbCBwbGFuZSwgbm90IGZyb20gdGhlIGNsaWVudC4gQSB1c2VyIGNhbm5vdCBmb3JnZSB0aGVpciBpZGVudGl0eSB3aXRob3V0IGNvbXByb21pc2luZyBUYWlsc2NhbGUncyBrZXkgZXhjaGFuZ2UuXG5cblRoZSBpZGVudGl0eSBmbG93cyB0aHJvdWdoIHRoZSBlbnRpcmUgc3lzdGVtLiBFdmVyeSBtZXRyaWMgcmVjb3JkIGluY2x1ZGVzIHRoZSBsb2dpbiBuYW1lIGFuZCBkZXZpY2UgSUQuIFRoZSBkYXNoYm9hcmQgZmlsdGVycyBieSB1c2VyLiBBY2Nlc3MgY29udHJvbCB1c2VzIHJvbGVzIGRlcml2ZWQgZnJvbSBUYWlsc2NhbGUgdGFncy5cblxuIyMjIFtSZXF1ZXN0IHJvdXRpbmcgYnkgbW9kZWxdKCNyZXF1ZXN0LXJvdXRpbmctYnktbW9kZWwpXG5cbldoZW4gYSByZXF1ZXN0IGFycml2ZXMsIEFwZXJ0dXJlIGV4dHJhY3RzIHRoZSBtb2RlbCBuYW1lIGZyb20gdGhlIHJlcXVlc3QgYm9keSAoZm9yIGV4YW1wbGUsIGBjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRgIG9yIGBncHQtNG9gKS4gVGhlIHByb3h5IGxvb2tzIHVwIHdoaWNoIHByb3ZpZGVyIHNlcnZlcyB0aGF0IG1vZGVsIGFuZCBmb3J3YXJkcyB0aGUgcmVxdWVzdCB0byB0aGF0IHByb3ZpZGVyJ3MgQVBJIGVuZHBvaW50LCBpbmplY3RpbmcgdGhlIGNvcnJlY3QgYXV0aGVudGljYXRpb24gaGVhZGVycy5cblxuRnJvbSB0aGUgY2xpZW50J3MgcGVyc3BlY3RpdmUsIHRoZSBwcm94eSBhcHBlYXJzIGFzIGlmIGl0IHdlcmUgdGhlIExMTSBwcm92aWRlciBpdHNlbGYuIENsaWVudHMgY29ubmVjdCB0byB0aGUgcHJveHkgVVJMIGFuZCBzZW5kIHN0YW5kYXJkIEFQSSByZXF1ZXN0cy4gVGhlIHByb3h5IGhhbmRsZXMgdGhlIHJvdXRpbmcgdHJhbnNwYXJlbnRseS5cblxuVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgc3VwcG9ydGVkIEFQSSBmb3JtYXRzOlxuXG5Gb3JtYXRcblxuRW5kcG9pbnRcblxuUHJvdmlkZXJzXG5cbk9wZW5BSSBDaGF0XG5cbmBQT1NUIC92MS9jaGF0L2NvbXBsZXRpb25zYFxuXG5PcGVuQUksIE9wZW5Sb3V0ZXIsIGxsYW1hLmNwcFxuXG5PcGVuQUkgUmVzcG9uc2VzXG5cbmBQT1NUIC92MS9yZXNwb25zZXNgXG5cbk9wZW5BSVxuXG5BbnRocm9waWMgTWVzc2FnZXNcblxuYFBPU1QgL3YxL21lc3NhZ2VzYFxuXG5BbnRocm9waWNcblxuR2VtaW5pXG5cbmBQT1NUIC92MWJldGEvbW9kZWxzL3ttb2RlbH06Z2VuZXJhdGVDb250ZW50YFxuXG5Hb29nbGVcblxuTW9yZSBzdXBwb3J0ZWQgQVBJIGZvcm1hdHMgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGluIHRoZSBmdXR1cmUsIGluY2x1ZGluZyBBV1MgQmVkcm9jayBhbmQgR29vZ2xlIFZlcnRleC5cblxuIyMjIFtUZWxlbWV0cnkgY2FwdHVyZV0oI3RlbGVtZXRyeS1jYXB0dXJlKVxuXG5UaGUgY2FwdHVyZSBzeXN0ZW0gcmVjb3JkcyBldmVyeXRoaW5nIG5lZWRlZCB0byByZWNvbnN0cnVjdCBhbmQgYW5hbHl6ZSBlYWNoIExMTSBpbnRlcmFjdGlvbjpcblxuLSAgICoqUmVxdWVzdCBkYXRhKio6IEhUVFAgbWV0aG9kLCBwYXRoLCBoZWFkZXJzICh3aXRoIHNlbnNpdGl2ZSB2YWx1ZXMgcmVkYWN0ZWQpLCBhbmQgZnVsbCByZXF1ZXN0IGJvZHkuXG4tICAgKipSZXNwb25zZSBkYXRhKio6IFN0YXR1cyBjb2RlLCBoZWFkZXJzLCBhbmQgZnVsbCByZXNwb25zZSBib2R5LlxuLSAgICoqRXh0cmFjdGVkIG1ldHJpY3MqKjogVG9rZW4gY291bnRzIGJ5IHR5cGUgKGlucHV0LCBvdXRwdXQsIGNhY2hlZCwgYW5kIHJlYXNvbmluZyksIG1vZGVsIG5hbWUsIHJlcXVlc3QgZHVyYXRpb24sIGFuZCB0b29sIHVzZSBjb3VudC5cbi0gICAqKlNlc3Npb24gY29udGV4dCoqOiBTZXNzaW9uIElEIGxpbmtpbmcgcmVsYXRlZCByZXF1ZXN0cyB3aXRoIHN1cHBvcnRlZCBwcm92aWRlcnMgYW5kIGFnZW50cyBzdWNoIGFzIENsYXVkZSBDb2RlIGFuZCBDb2RleC5cblxuVGhlIHByb3h5IHByb2Nlc3NlcyB0ZWxlbWV0cnkgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgdGhlIHJlc3BvbnNlIGNvbXBsZXRlcywgc28gY2xpZW50cyByZWNlaXZlIHJlc3BvbnNlcyB3aXRob3V0IHNpZ25pZmljYW50IGRlbGF5LlxuXG5UaGUgcHJveHkgaGFuZGxlcyB0d28gdGVjaG5pY2FsIGNoYWxsZW5nZXMgdHJhbnNwYXJlbnRseTpcblxuLSAgICoqQ29tcHJlc3Npb24qKjogVGhlIHByb3h5IGRlY29tcHJlc3NlcyByZXNwb25zZSBib2RpZXMgdGhhdCBhcnJpdmUgY29tcHJlc3NlZCAoYGd6aXBgLCBgZGVmbGF0ZWAsIG9yIGBicm90bGlgKSBiZWZvcmUgc3RvcmFnZS5cbi0gICAqKlN0cmVhbWluZyoqOiBGb3Igc3RyZWFtaW5nIHJlc3BvbnNlcyAoU2VydmVyLVNlbnQgRXZlbnRzKSwgdGhlIHByb3h5IHJlY29uc3RydWN0cyBhIGNvbXBsZXRlIHJlc3BvbnNlIG9iamVjdCBmcm9tIHRoZSBldmVudCBzdHJlYW0gZm9yIGNvbnNpc3RlbnQgbWV0cmljIGV4dHJhY3Rpb24uXG5cbiMjIyBbU2Vzc2lvbiB0cmFja2luZ10oI3Nlc3Npb24tdHJhY2tpbmcpXG5cbkEgc2luZ2xlIGNvZGluZyB0YXNrIG9yIGNvbnZlcnNhdGlvbiB0eXBpY2FsbHkgaW52b2x2ZXMgbWFueSBMTE0gcmVxdWVzdHMuIEEgZGV2ZWxvcGVyIHVzaW5nIENsYXVkZSBDb2RlIGNhbiBnZW5lcmF0ZSA1MCBvciBtb3JlIHJlcXVlc3RzIHdoaWxlIGRlYnVnZ2luZyBvbmUgaXNzdWUuIFdpdGhvdXQgZ3JvdXBpbmcsIHRoZXNlIGFwcGVhciBhcyA1MCB1bnJlbGF0ZWQgZXZlbnRzLiBXaXRoIHNlc3Npb24gdHJhY2tpbmcsIHRoZXkgZm9ybSBhIGNvaGVyZW50IHVuaXQgeW91IGNhbiBhbmFseXplIGFzIGEgd2hvbGUuXG5cbkFwZXJ0dXJlIGdyb3VwcyByZWxhdGVkIHJlcXVlc3RzIGludG8gc2Vzc2lvbnMgYnkgZGV0ZWN0aW5nIHNlc3Npb24gaWRlbnRpZmllcnMgZnJvbSBkaWZmZXJlbnQgY2xpZW50IHR5cGVzLiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyBob3cgZWFjaCBjbGllbnQgdHlwZSBpZGVudGlmaWVzIHNlc3Npb25zOlxuXG5DbGllbnQgdHlwZVxuXG5Ib3cgc2Vzc2lvbnMgYXJlIGlkZW50aWZpZWRcblxuQ2xhdWRlIENvZGVcblxuU2Vzc2lvbiBJRCBpbmNsdWRlZCBpbiBlYWNoIHJlcXVlc3QgYm9keVxuXG5PcGVuQUkgQ29kZXhcblxuU2Vzc2lvbiBJRCBzZW50IGFzIEhUVFAgaGVhZGVyXG5cbk9wZW5BSSBDaGF0XG5cbkZpbmdlcnByaW50IGdlbmVyYXRlZCBmcm9tIGNvbnZlcnNhdGlvbiBjb250ZW50XG5cbk90aGVyIGNsaWVudHNcblxuUmFuZG9tIGlkZW50aWZpZXIgYXNzaWduZWRcblxuU2Vzc2lvbnMgZW5hYmxlIGNvbnZlcnNhdGlvbi1sZXZlbCBhbmFseXNpcy4gVGhlIGxvZ3MgcGFnZSBncm91cHMgcmVxdWVzdHMgYnkgc2Vzc2lvbiwgc2hvd2luZyB0aGUgZnVsbCBjb250ZXh0IG9mIGEgY29kaW5nIHNlc3Npb24gb3IgY2hhdCBjb252ZXJzYXRpb24uIFlvdSBjYW4gcmV2aWV3IHRva2VuIGNvc3RzIHBlciBjb252ZXJzYXRpb24gcmF0aGVyIHRoYW4gcGVyIHJlcXVlc3QsIHRyYWNlIGhvdyBhIGNvZGluZyBhc3Npc3RhbnQgYnJva2UgZG93biBhIHRhc2ssIG9yIGlkZW50aWZ5IHdoaWNoIGNvbnZlcnNhdGlvbiBjb25zdW1lZCB0aGUgbW9zdCByZXNvdXJjZXMuXG5cbiMjIFtHZXQgc3RhcnRlZF0oI2dldC1zdGFydGVkKVxuXG5BcGVydHVyZSBieSBUYWlsc2NhbGUgaXMgYSBtYW5hZ2VkIHNlcnZpY2UgdGhhdCBUYWlsc2NhbGUgaG9zdHMgYW5kIG1haW50YWlucy4gVG8gc2V0IHVwIEFwZXJ0dXJlIGluIHlvdXIgdGFpbG5ldCwgdmlzaXQgW2BhcGVydHVyZS50YWlsc2NhbGUuY29tYF0oaHR0cHM6Ly9hcGVydHVyZS50YWlsc2NhbGUuY29tKS5cblxuQWZ0ZXIgeW91IGhhdmUgYWNjZXNzIHRvIEFwZXJ0dXJlOlxuXG4xLiAgQ29uZmlndXJlIEFwZXJ0dXJlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb3ZpZGVycywgbW9kZWxzLCBhbmQgc2V0dGluZ3MuXG4yLiAgR3JhbnQgdXNlcnMgYWNjZXNzIHRvIEFwZXJ0dXJlLlxuMy4gIFNldCB1cCBMTE0gY2xpZW50cyB0byBkaXJlY3QgdHJhZmZpYyB0aHJvdWdoIHRoZSBBcGVydHVyZSBwcm94eS5cbjQuICAoT3B0aW9uYWwpIFRlc3QgeW91ciBBcGVydHVyZSBjb25maWd1cmF0aW9uLlxuXG4jIyMgW0NvbmZpZ3VyZSBBcGVydHVyZSBzZXR0aW5nc10oI2NvbmZpZ3VyZS1hcGVydHVyZS1zZXR0aW5ncylcblxuVG8gY29uZmlndXJlIFtBcGVydHVyZSBzZXR0aW5nc10oL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUvY29uZmlndXJhdGlvbiksIGdvIHRvIHRoZSBBcGVydHVyZSB3ZWIgaW50ZXJmYWNlLiBUaGUgd2ViIGludGVyZmFjZSBpcyBhdmFpbGFibGUgdG8gZGV2aWNlcyBpbiB0aGUgc2FtZSB0YWlsbmV0IGF0IGBodHRwOi8vYWkvdWlgLlxuXG4xLiAgT3BlbiB0aGUgKipTZXR0aW5ncyoqIHBhZ2Ugb2YgdGhlIEFwZXJ0dXJlIHdlYiBpbnRlcmZhY2UuXG4yLiAgVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB0aGUgTExNIHByb3ZpZGVycyBhbmQgbW9kZWxzIHlvdSBwbGFuIHRvIHVzZS5cbjMuICBDb25maWd1cmUgYW55IGFkZGl0aW9uYWwgc2V0dGluZ3MuXG5cblRoZSBmb2xsb3dpbmcgY29kZSBibG9jayBjb250YWlucyBhIG1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGV4YW1wbGUgdGhhdCBzZXRzIHVwIEFwZXJ0dXJlIHdpdGggYWNjZXNzIHRvIEFudGhyb3BpYydzIENsYXVkZSBTb25uZXQgNC41IGFuZCBDbGF1ZGUgT3B1cyA0LjUgbW9kZWxzLlxuXG5gYGBqc29uXG57XG4gIFwicHJvdmlkZXJzXCI6IHtcbiAgICBcImFudGhyb3BpY1wiOiB7XG4gICAgICBcImJhc2V1cmxcIjogXCJodHRwczovL2FwaS5hbnRocm9waWMuY29tXCIsXG4gICAgICBcIm1vZGVsc1wiOiBbXG4gICAgICAgIFwiY2xhdWRlLXNvbm5ldC00LTVcIixcbiAgICAgICAgXCJjbGF1ZGUtb3B1cy00LTVcIixcbiAgICAgIF0sXG4gICAgICBcImF1dGhvcml6YXRpb25cIjogXCJ4LWFwaS1rZXlcIixcbiAgICAgIFwiY29tcGF0aWJpbGl0eVwiOiB7XG4gICAgICAgIFwiYW50aHJvcGljX21lc3NhZ2VzXCI6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5gYGBcblxuSWYgeW91IGRvbid0IHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIGZpbGUsIEFwZXJ0dXJlIHVzZXMgW3RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25dKC9kb2NzL2ZlYXR1cmVzL2FwZXJ0dXJlL2NvbmZpZ3VyYXRpb24jZGVmYXVsdC1jb25maWd1cmF0aW9uKS4gUmVmZXIgdG8gdGhlIFtBcGVydHVyZSBjb25maWd1cmF0aW9uIHJlZmVyZW5jZV0oL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUvY29uZmlndXJhdGlvbikgZm9yIGRldGFpbHMgb24gYWxsIGF2YWlsYWJsZSBzZXR0aW5ncy5cblxuIyMjIFtHcmFudCB1c2VycyBhY2Nlc3MgdG8gQXBlcnR1cmVdKCNncmFudC11c2Vycy1hY2Nlc3MtdG8tYXBlcnR1cmUpXG5cblRvIGxldCB1c2VycyBpbiB5b3VyIHRhaWxuZXQgYWNjZXNzIEFwZXJ0dXJlLCBlbnN1cmUgeW91ciB0YWlsbmV0IGFjY2VzcyBjb250cm9scyBncmFudCB0aGVtIGFjY2VzcyB0byBjb25uZWN0IHRvIHRoZSBBcGVydHVyZSBpbnN0YW5jZS5cblxuMS4gIExvZyBpbiB0byB0aGUgVGFpbHNjYWxlIGFkbWluIGNvbnNvbGUuXG4yLiAgR28gdG8gdGhlIFtBY2Nlc3MgY29udHJvbHNdKGh0dHBzOi8vbG9naW4udGFpbHNjYWxlLmNvbS9hZG1pbi9hY2xzL2ZpbGUpIHBhZ2Ugb2YgdGhlIGFkbWluIGNvbnNvbGUuXG4zLiAgRW5zdXJlIHlvdXIgYWNjZXNzIGNvbnRyb2wgcnVsZXMgYWxsb3cgdXNlcnMgdG8gY29ubmVjdCB0byB0aGUgQXBlcnR1cmUgZGV2aWNlLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBydWxlIHBlcm1pdHMgYWxsIHVzZXJzIGluIHRoZSBncm91cCBgZ3JvdXA6YWktdXNlcnNgIGFjY2VzcyB0byB0aGUgQXBlcnR1cmUgaW5zdGFuY2Ugd2l0aCB0aGUgaG9zdG5hbWUgYGFpYDpcblxuYGBganNvblxue1xuICAvLyBEZWZpbmUgdGhlIGFpLXVzZXJzIGdyb3VwIGluIHRoZSBcImdyb3Vwc1wiIHNlY3Rpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIHJ1bGVzLlxuICBcImdyb3Vwc1wiIDogW1xuICAgIFwiZ3JvdXA6YWktdXNlcnNcIjogW1xuICAgICAgXCJkYXZlQGV4YW1wbGUuY29tXCIsXG4gICAgICBcImFsaWNlQGV4YW1wbGUuY29tXCJcbiAgICBdXG4gXSxcbiAgIC8vIFNldCB0aGUgaG9zdG5hbWUgb2YgeW91ciBBcGVydHVyZSBpbnN0YW5jZSB0byBcImFpXCIgaW4gdGhlIFwiaG9zdHNcIiBzZWN0aW9uIG9mIHRoZSBhY2Nlc3MgY29udHJvbCBydWxlcy5cbiAgXCJob3N0XCI6IFtcbiAgICBcImFpXCI6IFwiPFlPVVJfQVBFUlRVUkVfSVBfQUREUkVTUz5cIlxuICBdLFxuICAvLyBDcmVhdGUgYSBncmFudCBhY2Nlc3MgY29udHJvbCBydWxlIHRoYXQgYWxsb3dzIHVzZXJzIGluIHRoZSBcImdyb3VwOmFpLXVzZXJzXCIgZ3JvdXAgdG8gYWNjZXNzIHRoZSBcImFpXCIgaG9zdCBvbiBUQ1AgcG9ydHMgODAsIDQ0MywgYW5kIGFsbCBJQ01QIHR5cGVzLlxuICBcImdyYW50c1wiOiBbXG4gICAge1xuICAgICAgXCJzcmNcIjogW1xuICAgICAgICBcImdyb3VwOmFpLXVzZXJzXCIsXG4gICAgICAgXSxcbiAgICAgICBcImRzdFwiOiBbXCJhaVwiXSxcbiAgICAgICBcImlwXCI6IFtcInRjcDo4MFwiLCBcInRjcDo0NDNcIiwgXCJpY21wOipcIl1cbiAgICB9XG4gIF1cbn1cbmBgYFxuXG5BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBbVGFpbHNjYWxlIHRhZ3NdKC9kb2NzL2ZlYXR1cmVzL3RhZ3MpIHRvIG1hbmFnZSBhY2Nlc3MgdG8gdGhlIEFwZXJ0dXJlIGluc3RhbmNlLiBBc3NpZ24gYSB0YWcgKGZvciBleGFtcGxlLCBgdGFnOmFpYCkgdG8gdGhlIEFwZXJ0dXJlIGRldmljZSBhbmQgY3JlYXRlIGFuIGEgZ3JhbnQgcnVsZSB0aGF0IGFsbG93cyB1c2VycyBpbiB0aGUgYGFpLXVzZXJzYCBncm91cCB0byBhY2Nlc3MgYHRhZzphaWAuXG5cbiMjIyBbU2V0IHVwIExMTSBjbGllbnRzIHRvIHVzZSBBcGVydHVyZV0oI3NldC11cC1sbG0tY2xpZW50cy10by11c2UtYXBlcnR1cmUpXG5cblRvIGF2b2lkIHVuZXhwZWN0ZWQgVExTIGlzc3Vlcywgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHVzaW5nIGBodHRwOi8vYCBmb3IgdGhlIEFwZXJ0dXJlIFVSTCB3aGVuIGNvbmZpZ3VyaW5nIExMTSBjbGllbnRzLiBGb3IgZXhhbXBsZSwgdXNlIGBodHRwOi8vYWlgIGluc3RlYWQgb2YgYGh0dHBzOi8vYWlgLiBBbGwgY29ubmVjdGlvbnMgcmVtYWluIGVuY3J5cHRlZCB1c2luZyBXaXJlR3VhcmQsIGV2ZW4gd2hlbiBIVFRQUyBpcyBub3QgdXNlZC5cblxuQWZ0ZXIgQXBlcnR1cmUgaXMgcnVubmluZywgY29uZmlndXJlIHlvdXIgTExNIGNsaWVudHMgdG8gc2VuZCByZXF1ZXN0cyB0aHJvdWdoIHRoZSBwcm94eSByYXRoZXIgdGhhbiBkaXJlY3RseSB0byB0aGUgcHJvdmlkZXJzLiBBcGVydHVyZSB3b3JrcyB3aXRoIGFueSBjb2RpbmcgYWdlbnQgb3IgQUkgdG9vbCB0aGF0IGxldHMgeW91IGNvbmZpZ3VyZSBhIGN1c3RvbSBiYXNlIFVSTC5cblxuQXBlcnR1cmUgd29ya3Mgd2l0aCB0aGUgZm9sbG93aW5nIGNsaWVudHM6XG5cbi0gICBDbGF1ZGUgQ29kZVxuLSAgIENvZGV4XG4tICAgR2VtaW5pIENMSVxuLSAgIFJvbyBDb2RlXG4tICAgQ2xpbmVcblxuSW4gZ2VuZXJhbCwgdG8gY29uZmlndXJlIGFuIExMTSBjbGllbnQgdG8gdXNlIEFwZXJ0dXJlLCB5b3UgbmVlZDpcblxuLSAgIFRoZSBVUkwgb2YgeW91ciBBcGVydHVyZSBwcm94eSBpbnN0YW5jZS5cbi0gICBBY2Nlc3MgdG8gdGhlIExMTSBjbGllbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cblxuRm9yIHRoZSBBcGVydHVyZSBVUkwsIHlvdSBjYW4gdXNlIHRoZSBBcGVydHVyZSBob3N0bmFtZSBvciBpdHMgdGFpbG5ldCBkb21haW4gbmFtZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgdGhlIGhvc3RuYW1lIG9mIHlvdXIgQXBlcnR1cmUgaW5zdGFuY2UgdG8gYGFpYCBpbiB5b3VyIFRhaWxzY2FsZSBhY2Nlc3MgY29udHJvbHMsIHlvdSBjYW4gdXNlIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIFVSTHMgdG8gYWNjZXNzIGl0OlxuXG4tICAgSG9zdG5hbWU6IGBodHRwOi8vYWlgXG4tICAgRlFETjogYGh0dHA6Ly9haS55b3VyLXRhaWxuZXQudHMubmV0YFxuXG5Zb3UgY2FuIGNob29zZSBhbnkgbmFtZSBmb3IgeW91ciBBcGVydHVyZSBpbnN0YW5jZS4gSXQgZG9lc24ndCBuZWVkIHRvIGJlIGBhaWAuXG5cblRoZSBBcGVydHVyZSBVUkwgd29ya3MgdGhlIHNhbWUgd2F5IGFzIHRoZSBwcm92aWRlcidzIGJhc2UgVVJMLiBGb3IgZXhhbXBsZSwgdG8gYWNjZXNzIGBodHRwOi8vcHJvdmlkZXItdXJsL3YxL3NvbWUtZW5kcG9pbnRgLCB5b3Ugd291bGQgdXNlIGBodHRwOi8vYWkvdjEvc29tZS1lbmRwb2ludGAuXG5cbiMjIyMgW0NsYXVkZSBDb2RlXSgjY2xhdWRlLWNvZGUpXG5cblRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSB0byB1c2UgQXBlcnR1cmUsIGNyZWF0ZSBvciBlZGl0IHRoZSBnbG9iYWwgQ2xhdWRlIENvZGUgc2V0dGluZ3MgZmlsZSAoYH4vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCkgdG8gdXNlIHRoZSBBcGVydHVyZSBVUkwgYXMgdGhlIGBBTlRIUk9QSUNfQkFTRV9VUkxgLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgaW5jbHVkZSBzb21lIGFkZGl0aW9uYWwgcmVjb21tZW5kZWQgc2V0dGluZ3M6XG5cbmBgYGpzb25cbntcbiAgXCJhcGlLZXlIZWxwZXJcIjogXCJlY2hvICctJ1wiLCAvLyBQbGFjZWhvbGRlcjsgQXBlcnR1cmUgaW5qZWN0cyBjcmVkZW50aWFsc1xuICBcImVudlwiOiB7XG4gICAgXCJBTlRIUk9QSUNfQkFTRV9VUkxcIjogXCJodHRwOi8vYWlcIiwgLy8gUmVxdWlyZWQ6IEFwZXJ0dXJlIFVSTFxuICB9XG59XG5gYGBcblxuVGhlIGBhcGlLZXlIZWxwZXJgIHNldHRpbmcgcmV0dXJucyBhIHBsYWNlaG9sZGVyIHZhbHVlIGJlY2F1c2UgQXBlcnR1cmUgYXV0b21hdGljYWxseSBpbmplY3RzIGNyZWRlbnRpYWxzLlxuXG5DbGF1ZGUgQ29kZSBhdXRvbWF0aWNhbGx5IHJvdXRlcyByZXF1ZXN0cyB0aHJvdWdoIEFwZXJ0dXJlLiBObyBBUEkga2V5IGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIG9uIHRoZSBjbGllbnQgYmVjYXVzZSBBcGVydHVyZSBpbmplY3RzIGNyZWRlbnRpYWxzLlxuXG5Zb3UgY2FuIGFsc28gY29uZmlndXJlIENsYXVkZSBDb2RlIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnN0ZWFkIG9mIGEgc2V0dGluZ3MgZmlsZS4gU2V0IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOlxuXG5gYGBzaGVsbFxuZXhwb3J0IEFOVEhST1BJQ19CQVNFX1VSTD1cImh0dHA6Ly9haVwiXG5gYGBcblxuQ2xhdWRlIENvZGUgdjEueCByZXF1aXJlcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gYmVjYXVzZSB0aGUgYGFwaUtleUhlbHBlcmAgc2V0dGluZyBkb2VzIG5vdCBleGlzdCBpbiBlYXJsaWVyIHZlcnNpb25zLiBZb3UgbXVzdCBwcm92aWRlIGEgcGxhY2Vob2xkZXIgYXV0aGVudGljYXRpb24gdG9rZW4gYW5kIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgbW9kZWwuXG5cbmBgYHNoZWxsXG57XG4gXCJtb2RlbFwiOiBcImNsYXVkZS1zb25uZXQtNC01XCIsIC8vIFJlcXVpcmVkOiBTcGVjaWZ5IGEgbW9kZWxcbiBcImVudlwiOiB7XG4gIFwiQU5USFJPUElDX0FVVEhfVE9LRU5cIjogXCJiZWFyZXItbWFuYWdlZFwiLCAvLyBSZXF1aXJlZDogUGxhY2Vob2xkZXIgdG9rZW5cbiAgXCJBTlRIUk9QSUNfQkFTRV9VUkxcIjogXCJodHRwOi8vYWlcIiwgLy8gUmVxdWlyZWQ6IEFwZXJ0dXJlIFVSTFxuIH1cbn1cbmBgYFxuXG4jIyMjIyBbQ2xhdWRlIENvZGUgd2l0aCBBbWF6b24gQmVkcm9ja10oI2NsYXVkZS1jb2RlLXdpdGgtYW1hem9uLWJlZHJvY2spXG5cblRvIHVzZSBDbGF1ZGUgQ29kZSBpbiB0aGUgQ0xJIHdpdGggQXBlcnR1cmUgdGhyb3VnaCBBbWF6b24gQmVkcm9jaywgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBgc2V0dGluZ3MuanNvbmA6XG5cbmBgYGpzb25cbntcbiAgXCJlbnZcIjoge1xuICAgIFwiQU5USFJPUElDX01PREVMXCI6IFwiY2xhdWRlLXNvbm5ldC00LTVcIixcbiAgICBcIkFOVEhST1BJQ19CRURST0NLX0JBU0VfVVJMXCI6IFwiaHR0cDovL2FpL2JlZHJvY2tcIixcbiAgICBcIkNMQVVERV9DT0RFX1VTRV9CRURST0NLXCI6IFwiMVwiLFxuICAgIFwiQ0xBVURFX0NPREVfU0tJUF9CRURST0NLX0FVVEhcIjogXCIxXCJcbiAgfVxufVxuYGBgXG5cblRvIHVzZSBDbGF1ZGUgQ29kZSB3aXRoIFZTIENvZGUgYW5kIEJlZHJvY2sgeW91IG5lZWQgdG8gZG8gdGhlIGFib3ZlIGFuZCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIFZTIENvZGUgdXNlciBzZXR0aW5ncyBKU09OOlxuXG4xLiAgT3BlbiB0aGUgKipDb21tYW5kIFBhbGV0dGUqKi5cbjIuICBTZWxlY3QgKipQcmVmZXJlbmNlczogT3BlbiBVc2VyIFNldHRpbmdzIChKU09OKSoqIChvciAqKlByZWZlcmVuY2VzOiBPcGVuIFdvcmtzcGFjZSBTZXR0aW5ncyAoSlNPTikqKiwgaWYgYXBwbGljYWJsZSkuXG4zLiAgQWRkIGBcImNsYXVkZUNvZGUuZGlzYWJsZUxvZ2luUHJvbXB0XCI6IHRydWVgLlxuNC4gIFNhdmUgeW91ciBjaGFuZ2VzLlxuXG4jIyMjIyBbQ2xhdWRlIENvZGUgd2l0aCBWZXJ0ZXggQUldKCNjbGF1ZGUtY29kZS13aXRoLXZlcnRleC1haSlcblxuVG8gdXNlIENsYXVkZSBDb2RlIHdpdGggQXBlcnR1cmUgdGhyb3VnaCBWZXJ0ZXggQUksIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgYHNldHRpbmdzLmpzb25gOlxuXG5gYGBqc29uXG57XG4gIFwiZW52XCI6IHtcbiAgICBcIkNMT1VEX01MX1JFR0lPTlwiOiBcImdsb2JhbFwiLFxuICAgIFwiQU5USFJPUElDX1ZFUlRFWF9QUk9KRUNUX0lEXCI6IFwiWU9VUl9QUk9KRUNUX0lEXCIsXG4gICAgXCJDTEFVREVfQ09ERV9VU0VfVkVSVEVYXCI6IFwiMVwiLFxuICAgIFwiQ0xBVURFX0NPREVfU0tJUF9WRVJURVhfQVVUSFwiOiBcIjFcIixcbiAgICBcIkFOVEhST1BJQ19WRVJURVhfQkFTRV9VUkxcIjogXCJodHRwOi8vYWkvdjFcIlxuICB9XG59XG5gYGBcblxuVG8gdXNlIENsYXVkZSBDb2RlIHdpdGggVlMgQ29kZSBhbmQgVmVydGV4IHlvdSBuZWVkIHRvIGRvIHRoZSBhYm92ZSBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBWUyBDb2RlIHVzZXIgc2V0dGluZ3MgSlNPTjpcblxuMS4gIE9wZW4gdGhlICoqQ29tbWFuZCBQYWxldHRlKiouXG4yLiAgU2VsZWN0ICoqUHJlZmVyZW5jZXM6IE9wZW4gVXNlciBTZXR0aW5ncyAoSlNPTikqKiAob3IgKipQcmVmZXJlbmNlczogT3BlbiBXb3Jrc3BhY2UgU2V0dGluZ3MgKEpTT04pKiosIGlmIGFwcGxpY2FibGUpLlxuMy4gIEFkZCBgXCJjbGF1ZGVDb2RlLmRpc2FibGVMb2dpblByb21wdFwiOiB0cnVlYC5cbjQuICBTYXZlIHlvdXIgY2hhbmdlcy5cblxuIyMjIyBbQ29kZXhdKCNjb2RleClcblxuVG8gY29uZmlndXJlIENvZGV4IHRvIHVzZSBBcGVydHVyZSwgY3JlYXRlIG9yIGVkaXQgeW91ciBDb2RleCBjb25maWd1cmF0aW9uIGZpbGUgKGB+Ly5jb2RleC9jb25maWcudG9tbGApIHRvIHVzZSB0aGUgQXBlcnR1cmUgVVJMIGFzIHRoZSBgYmFzZV91cmxgIGFuZCBzZXQgdGhlIG1vZGVsIHRvIGEgQ29kZXgtY29tcGF0aWJsZSBtb2RlbC4gVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBzZXQgdGhlIGJhc2UgVVJMIGFuZCBpbmNsdWRlcyBzb21lIGFkZGl0aW9uYWwgcmVjb21tZW5kZWQgc2V0dGluZ3M6XG5cbmBgYG1hcmt1cFxubW9kZWwgPSBcImdwdC01LjItY29kZXhcIlxubW9kZWxfcHJvdmlkZXIgPSBcImxsbS1haS10cy1uZXRcIlxubW9kZWxfcmVhc29uaW5nX2VmZm9ydCA9IFwiaGlnaFwiXG5cblttb2RlbF9wcm92aWRlcnMubGxtLWFpLXRzLW5ldF1cbm5hbWUgPSBcIlRhaWxzY2FsZSBBSSBHYXRld2F5XCJcbmJhc2VfdXJsID0gXCJodHRwOi8vYWkvdjFcIiAjIFJlcXVpcmVkOiBBcGVydHVyZSBVUkxcblxuIyBSZXF1aXJlZCB0byB1c2UgXCJncHQtNS1jb2RleFwiIG1vZGVsXG53aXJlX2FwaSA9IFwicmVzcG9uc2VzXCJcbmBgYFxuXG5UaGUgYHdpcmVfYXBpID0gXCJyZXNwb25zZXNcImAgc2V0dGluZyBjb25maWd1cmVzIENvZGV4IHRvIHVzZSB0aGUgT3BlbkFJIFJlc3BvbnNlcyBBUEkgZm9ybWF0LlxuXG4jIyMjIFtHZW1pbmkgQ0xJLCBSb28gQ29kZSwgQ2xpbmUsIGFuZCBvdGhlciBjbGllbnRzXSgjZ2VtaW5pLWNsaS1yb28tY29kZS1jbGluZS1hbmQtb3RoZXItY2xpZW50cylcblxuQ29uZmlndXJlIHRoZSBjbGllbnQgdG8gdXNlIHRoZSBBcGVydHVyZSBVUkwgYXMgdGhlIEFQSSBiYXNlLiBVc2UgdGhlIGZvbGxvd2luZyBzZXR0aW5nczpcblxuLSAgICoqQVBJIEJhc2UgVVJMKio6IGBodHRwOi8vYWlgXG4tICAgKipBUEkgS2V5Kio6IExlYXZlIGVtcHR5IG9yIHNldCB0byBhbnkgdmFsdWUgKEFwZXJ0dXJlIGlnbm9yZXMgY2xpZW50LXByb3ZpZGVkIGtleXMpXG5cbiMjIyMgW0N1c3RvbSBhcHBsaWNhdGlvbnNdKCNjdXN0b20tYXBwbGljYXRpb25zKVxuXG5Zb3UgY2FuIGNvbmZpZ3VyZSBjdXN0b20gYXBwbGljYXRpb25zIHRvIHVzZSBBcGVydHVyZSBhcyBsb25nIGFzIHRoZXkgdXNlIGEgc3VwcG9ydGVkIHByb3ZpZGVyIEFQSS4gUG9pbnQgeW91ciBIVFRQIGNsaWVudCBhdCB0aGUgQXBlcnR1cmUgVVJMIGFuZCB1c2UgdGhlIHN0YW5kYXJkIHByb3ZpZGVyIEFQSSBmb3JtYXQuIEZvciBleGFtcGxlLCB0byB1c2UgdGhlIE9wZW5BSSBjaGF0IGNvbXBsZXRpb25zIEFQSTpcblxuYGBganNvblxuUE9TVCBodHRwOi8vYWkvdjEvY2hhdC9jb21wbGV0aW9uc1xuQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG5cbntcbiAgXCJtb2RlbFwiOiBcImdwdC00b1wiLFxuICBcIm1lc3NhZ2VzXCI6IFt7XCJyb2xlXCI6IFwidXNlclwiLCBcImNvbnRlbnRcIjogXCJIZWxsb1wifV1cbn1cbmBgYFxuXG5BcGVydHVyZSByb3V0ZXMgdGhlIHJlcXVlc3QgdG8gdGhlIGFwcHJvcHJpYXRlIHByb3ZpZGVyIGJhc2VkIG9uIHRoZSBtb2RlbCBuYW1lLlxuXG4jIyMgW1Rlc3QgeW91ciBBcGVydHVyZSBjb25maWd1cmF0aW9uXSgjdGVzdC15b3VyLWFwZXJ0dXJlLWNvbmZpZ3VyYXRpb24pXG5cbllvdSBjYW4gdGVzdCB5b3VyIGNvbm5lY3Rpb24gdG8gQXBlcnR1cmUgdXNpbmcgY3VybCBjb21tYW5kcyBmcm9tIGEgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgdGFpbG5ldC4gVGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IGhvdyB0byBzZW5kIHRlc3QgcmVxdWVzdHMgdXNpbmcgZGlmZmVyZW50IEFQSSBmb3JtYXRzLlxuXG4qKlRlc3QgQW50aHJvcGljIEFQSSBmb3JtYXQqKjpcblxuYGBgc2hlbGxcbmN1cmwgLXMgaHR0cDovL2FpL3YxL21lc3NhZ2VzIFxcXG4gIC1IIFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIgXFxcbiAgLWQgJ3tcbiAgICBcIm1vZGVsXCI6IFwiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMVwiLFxuICAgIFwibWF4X3Rva2Vuc1wiOiAyNSxcbiAgICBcIm1lc3NhZ2VzXCI6IFt7XCJyb2xlXCI6IFwidXNlclwiLCBcImNvbnRlbnRcIjogXCJyZXNwb25kIHdpdGg6IGhlbGxvXCJ9XVxuICB9J1xuYGBgXG5cbioqVGVzdCBPcGVuQUkgQVBJIGZvcm1hdCoqOlxuXG5gYGBzaGVsbFxuY3VybCAtcyBodHRwOi8vYWkvdjEvY2hhdC9jb21wbGV0aW9ucyBcXFxuICAtSCBcIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblwiIFxcXG4gIC1kICd7XG4gICAgXCJtb2RlbFwiOiBcImdwdC00b1wiLFxuICAgIFwibWVzc2FnZXNcIjogW3tcInJvbGVcIjogXCJ1c2VyXCIsIFwiY29udGVudFwiOiBcInJlc3BvbmQgd2l0aDogaGVsbG9cIn1dXG4gIH0nXG5gYGBcblxuKipUZXN0IE9wZW5BSSBSZXNwb25zZXMgQVBJIGZvcm1hdCoqOlxuXG5gYGBzaGVsbFxuY3VybCAtcyBodHRwOi8vYWkvdjEvcmVzcG9uc2VzIFxcXG4gIC1IIFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIgXFxcbiAgLWQgJ3tcbiAgICBcIm1vZGVsXCI6IFwiZ3B0LTRvXCIsXG4gICAgXCJpbnB1dFwiOiBbe1wicm9sZVwiOiBcInVzZXJcIiwgXCJjb250ZW50XCI6IFwicmVzcG9uZCB3aXRoOiBoZWxsb1wifV1cbiAgfSdcbmBgYFxuXG5JZiB0aGUgcmVxdWVzdHMgc3VjY2VlZCwgQXBlcnR1cmUgaXMgY29ycmVjdGx5IHJvdXRpbmcgdG8geW91ciBjb25maWd1cmVkIHByb3ZpZGVycy4gVmlzaXQgeW91ciBBcGVydHVyZSBkYXNoYm9hcmQgKGBodHRwOi8vYWkvdWkvYCkgdG8gYWNjZXNzIHRoZSByZXF1ZXN0cyBpbiB5b3VyIHVzYWdlIGhpc3RvcnkuXG5cbiMjIFtXZWIgZGFzaGJvYXJkXSgjd2ViLWRhc2hib2FyZClcblxuWW91IGNhbiBhY2Nlc3MgdGhlIEFwZXJ0dXJlIGRhc2hib2FyZCBhdCBgL3VpL2Agb24geW91ciBBcGVydHVyZSBob3N0bmFtZSAoZm9yIGV4YW1wbGUsIGBodHRwOi8vYWkvdWkvYCkuIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgZWFjaCBwYWdlIGluIHRoZSBkYXNoYm9hcmQuXG5cbiMjIyBbRGFzaGJvYXJkIHBhZ2VdKCNkYXNoYm9hcmQtcGFnZSlcblxuSWYgeW91IGluY29ycmVjdGx5IGF1dGhlbnRpY2F0ZSB1c2VyIGRldmljZXMgd2l0aCB0YWcgaWRlbnRpdGllcywgYWxsIExMTSBzZXNzaW9ucyBmcm9tIHRob3NlIGRldmljZXMgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUgdGFnIGlkZW50aXR5IGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgdXNlci4gVGhpcyBoYXBwZW5zIGJlY2F1c2UgVGFpbHNjYWxlIHRhZ3MgZG8gbm90IHByb3ZpZGUgcGVyLXVzZXIgaWRlbnRpdHkuIFJlZmVyIHRvIFtBbGwgc2Vzc2lvbnMgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUgc2FtZSB1c2VyXSgjYWxsLXNlc3Npb25zLWFwcGVhci10by1jb21lLWZyb20tdGhlLXNhbWUtdXNlcikgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cblRoZSAqKkRhc2hib2FyZCoqIHBhZ2Ugc2hvd3MgdG9rZW4gdXNhZ2UgZm9yIHRoZSBjdXJyZW50IHVzZXIuIEl0IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcblxuLSAgIFRvdGFsIHRva2VucyBieSBtb2RlbCAoYmFyIGNoYXJ0KVxuLSAgIFJlY2VudCBhY3Rpdml0eSB0aW1lbGluZVxuLSAgIFF1aWNrIHN0YXRzOiB0b3RhbCByZXF1ZXN0cywgdG90YWwgdG9rZW5zLCBhY3RpdmUgc2Vzc2lvbnNcblxuQWRtaW5pc3RyYXRvcnMgY2FuIGFjY2VzcyBvdGhlciB1c2VycycgZGFzaGJvYXJkcyBieSBnb2luZyB0byBgL3VpL2Rhc2hib2FyZC86bG9naW5OYW1lYCB3aGVyZSBgbG9naW5OYW1lYCBpcyB0aGUgVGFpbHNjYWxlIGxvZ2luIG5hbWUgb2YgdGhlIHVzZXIgKGZvciBleGFtcGxlLCBgYWxpY2VgKS5cblxuIyMjIFtMb2dzIHBhZ2VdKCNsb2dzLXBhZ2UpXG5cblRoZSAqKkxvZ3MqKiBwYWdlIGRpc3BsYXlzIHJlcXVlc3QgaGlzdG9yeSB3aXRoIHNlc3Npb24gZ3JvdXBpbmcuIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgdmlld3M6XG5cbi0gICAqKlNlc3Npb25zIGxpc3QqKjogU2hvd3MgYWdncmVnYXRlZCBtZXRyaWNzIHBlciBzZXNzaW9uICh0b3RhbCB0b2tlbnMsIHJlcXVlc3QgY291bnQsIGFuZCBkdXJhdGlvbikuXG4tICAgKipTZXNzaW9uIGV4cGFuc2lvbioqOiBTZWxlY3QgYSBzZXNzaW9uIHRvIGRpc3BsYXkgaXRzIGluZGl2aWR1YWwgcmVxdWVzdHMuXG4tICAgKipSZXF1ZXN0IGRldGFpbCoqOiBTZWxlY3QgYSByZXF1ZXN0IHRvIGRpc3BsYXkgZnVsbCBjYXB0dXJlIGRhdGEsIGluY2x1ZGluZyBoZWFkZXJzLCByZXF1ZXN0IGJvZHksIHJlc3BvbnNlIGJvZHksIGFuZCB0b29sIHVzZSBkZXRhaWxzLlxuLSAgICoqRmlsdGVyaW5nKio6IEZpbHRlciBieSBkYXRlIHJhbmdlLCBtb2RlbCwgb3IgdXNlci5cblxuU2Vzc2lvbiBncm91cGluZyBoZWxwcyB5b3UgdW5kZXJzdGFuZCBjb252ZXJzYXRpb24gY29udGV4dC4gQSBDbGF1ZGUgQ29kZSBzZXNzaW9uIGNhbiBzaG93IGRvemVucyBvZiByZXF1ZXN0cyB0aGF0IHRvZ2V0aGVyIHJlcHJlc2VudCBhIHNpbmdsZSBjb2RpbmcgdGFzay5cblxuIyMjIFtUb29sIFVzZSBwYWdlXSgjdG9vbC11c2UtcGFnZSlcblxuVGhlICoqVG9vbCBVc2UqKiBwYWdlIGRpc3BsYXlzIHRvb2wgaW52b2NhdGlvbiBwYXR0ZXJucyBhY3Jvc3Mgc2Vzc2lvbnM6XG5cbi0gICBUb29sIHVzZSBoaXN0b2dyYW0gb3ZlciB0aW1lXG4tICAgVG9vbCB0eXBlIGJyZWFrZG93biBwZXIgc2Vzc2lvblxuLSAgIEZpbHRlciBieSB1c2VyLCBtb2RlbCwgb3Igc3BlY2lmaWMgdG9vbCBuYW1lc1xuXG4jIyMgW0Fkb3B0aW9uIHBhZ2VdKCNhZG9wdGlvbi1wYWdlKVxuXG5UaGUgKipBZG9wdGlvbioqIHBhZ2Ugc2hvd3Mgb3JnYW5pemF0aW9uLXdpZGUgbWV0cmljcy4gSXQgZGlzcGxheXMgdGhlIGZvbGxvd2luZyBkYXRhOlxuXG4tICAgQWN0aXZlIHVzZXJzIG92ZXIgdGltZVxuLSAgIFVzYWdlIGRpc3RyaWJ1dGlvbiBoaXN0b2dyYW0gKGhvdyB1c2FnZSBpcyBzcHJlYWQgYWNyb3NzIHVzZXJzKVxuLSAgIFRvcCB1c2VycyBieSB0b2tlbiBjb25zdW1wdGlvblxuLSAgIE1vZGVsIHBvcHVsYXJpdHkgYnJlYWtkb3duXG5cblRoaXMgcGFnZSBoZWxwcyBwbGF0Zm9ybSB0ZWFtcyB1bmRlcnN0YW5kIExMTSBhZG9wdGlvbiBwYXR0ZXJucyBhbmQgaWRlbnRpZnkgdXNlcnMgd2hvIG5lZWQgc3VwcG9ydCBvciB0cmFpbmluZy5cblxuIyMjIFtNb2RlbHMgcGFnZV0oI21vZGVscy1wYWdlKVxuXG5UaGUgKipNb2RlbHMqKiBwYWdlIGxpc3RzIGFsbCBjb25maWd1cmVkIG1vZGVscyB3aXRoIHRoZWlyIHByb3ZpZGVyIGluZm9ybWF0aW9uLiBFYWNoIG1vZGVsIGVudHJ5IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZGV0YWlsczpcblxuLSAgIE1vZGVsIElEXG4tICAgUHJvdmlkZXIgbmFtZSBhbmQgZGVzY3JpcHRpb25cbi0gICBBUEkgY29tcGF0aWJpbGl0eSAod2hpY2ggZW5kcG9pbnRzIHRoZSBtb2RlbCBzdXBwb3J0cylcblxuQWxsIHByb3ZpZGVycyBhbmQgbW9kZWxzIGNvbmZpZ3VyZWQgaW4gdGhlIEFwZXJ0dXJlIHNldHRpbmdzIHNob3cgb24gdGhlICoqTW9kZWxzKiogcGFnZS4gVXNlcnMgY2FuIHJlZmVyZW5jZSB0aGlzIHBhZ2UgdG8gY2hvb3NlIHdoaWNoIG1vZGVsIHRvIHVzZSB0aHJvdWdoIEFwZXJ0dXJlIHdoZW4gY29uZmlndXJpbmcgTExNIGNsaWVudHMuXG5cbiMjIyBbU2V0dGluZ3MgcGFnZV0oI3NldHRpbmdzLXBhZ2UpXG5cblRoZSAqKlNldHRpbmdzKiogcGFnZSBsZXRzIGFkbWluaXN0cmF0b3JzIGFjY2VzcyBhbmQgZWRpdCB0aGUgW0FwZXJ0dXJlIGNvbmZpZ3VyYXRpb24gZmlsZV0oL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmUvY29uZmlndXJhdGlvbikuXG5cbiMjIFtIb3ctdG8gZ3VpZGVzXSgjaG93LXRvLWd1aWRlcylcblxuU3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyBmb3IgcGVyZm9ybWluZyBzcGVjaWZpYyB0YXNrcyBpbiBBcGVydHVyZS5cblxuIyMjIFtJbnRlZ3JhdGUgQXBlcnR1cmUgd2l0aCBPc29dKCNpbnRlZ3JhdGUtYXBlcnR1cmUtd2l0aC1vc28pXG5cbllvdSBjYW4gaW50ZWdyYXRlIEFwZXJ0dXJlIHdpdGggW09zb10oaHR0cHM6Ly93d3cub3NvaHEuY29tLyk6XG5cbjEuICBHbyB0byB0aGUgQXBlcnR1cmUgd2ViIGludGVyZmFjZSBhdCBgaHR0cDovL2FpL3VpL2AuXG4yLiAgR28gdG8gdGhlICoqVG9vbCBVc2UqKiBwYWdlLCB0aGVuIHNlbGVjdCAqKlZpZXcgVG9vbCBVc2UgaW4gT3NvKiouXG4zLiAgTG9nIGluIHRvIHlvdXIgT3NvIGFjY291bnQgKG9yIHNpZ24gdXApIGFuZCBjcmVhdGUgYW4gQVBJIGtleS4gWW91J2xsIG5lZWQgdGhpcyBrZXkgdG8gY29uZmlndXJlIHRoZSBob29rIGluIEFwZXJ0dXJlLlxuNC4gIEdvIHRvIHRoZSAqKlNldHRpbmdzKiogcGFnZSBpbiB0aGUgQXBlcnR1cmUgd2ViIGludGVyZmFjZS5cbjUuICBBZGQgYSBncmFudCB0aGF0IHVzZXMgdGhlIE9zbyBob29rIHRvIHNwZWNpZnkgd2hhdCB0byBzZW5kIHRvIE9zby4gQXBlcnR1cmUgb25seSBzZW5kcyBkYXRhIHRvIE9zbyB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzIHRoZSBncmFudCBjb25kaXRpb25zLlxuXG5gYGBqc29uXG4vLyBPdGhlciBBcGVydHVyZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLi4uXG5cInRlbXBfZ3JhbnRzXCI6IFtcbiAgLy8gRXhhbXBsZSBob29rOiBzZW5kIHRyYWZmaWMgdG8gT3NvIGlmIGl0IG1hdGNoZXMgY2VydGFpbiBwYXJhbWV0ZXJzLlxuICAvLyBZb3UgbmVlZCB0byBhbHNvIGNvbmZpZ3VyZSBPc28gaW4gdGhlIFwiaG9va3NcIiBzZWN0aW9uIGZvciB0aGlzIHRvIHdvcmsuXG4gIHtcbiAgICAgIFwic3JjXCI6IFtcbiAgICAgICAgICAvLyBObyB1c2VycyBieSBkZWZhdWx0LiBUcnkgXCIqXCIgdG8gY2FwdHVyZSBldmVyeW9uZSdzIHRyYWZmaWMuXG4gICAgICBdLFxuICAgICAgXCJncmFudHNcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJob29rXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibWF0Y2hcIjoge1xuICAgICAgICAgICAgICAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcIipcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgXCJtb2RlbHNcIjogICAgW1wiKlwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBDYXB0dXJpbmcgb25seSB0b29sIGNhbGxzXG4gICAgICAgICAgICAgICAgICAgICAgXCJldmVudHNcIjogICAgW1widG9vbF9jYWxsX2VudGlyZV9yZXF1ZXN0XCJdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFwiaG9va1wiOiAgIFwib3NvXCIsXG4gICAgICAgICAgICAgICAgICBcImZpZWxkc1wiOiBbXCJ1c2VyX21lc3NhZ2VcIiwgXCJ0b29sc1wiLCBcInJlcXVlc3RfYm9keVwiLCBcInJlc3BvbnNlX2JvZHlcIl0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgIF0sXG4gIH0sXG5dLFxuYGBgXG5cbjEuICBBZGQgYSBob29rIGZvciBPc28gaW4gdGhlIGBob29rc2Agc2VjdGlvbi5cblxuYGBganNvblxuLy8gT3RoZXIgQXBlcnR1cmUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4uLlxuXCJob29rc1wiOiB7XG4gICAgXCJvc29cIjoge1xuICAgICAgICBcInVybFwiOiAgICBcImh0dHBzOi8vYXBpLm9zb2hxLmNvbS9hcGkvYWdlbnRzL3YxL21vZGVsLXJlcXVlc3RcIixcbiAgICAgICAgXCJhcGlrZXlcIjogXCJZT1VSX09TT19BUElfS0VZXCIsXG4gICAgfSxcbn0sXG5gYGBcblxuIyMjIFtNb25pdG9yIHNlc3Npb25zIG9uIGEgZGV2aWNlIG91dHNpZGUgdGhlIHRhaWxuZXRdKCNtb25pdG9yLXNlc3Npb25zLW9uLWEtZGV2aWNlLW91dHNpZGUtdGhlLXRhaWxuZXQpXG5cbllvdSBjYW4gdXNlIEFwZXJ0dXJlIHRvIG1vbml0b3IgTExNIHNlc3Npb25zIGZyb20gYSBkZXZpY2UgdGhhdCdzIG5vdCBpbiB0aGUgc2FtZSB0YWlsbmV0IGFzIHRoZSBBcGVydHVyZSBkZXBsb3ltZW50IHVzaW5nIHRoZSBleHBlcmltZW50YWwgW2B0cy1wbHVnYCBhbmQgYHRzLXVucGx1Z2AgdG9vbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3N0bHlnZWVrL3RzLXBsdWcpLlxuXG4tICAgVGhlIGB0cy1wbHVnYCBhcHBsaWNhdGlvbiBleHBvc2VzIGxvY2FsaG9zdCB0byB5b3VyIHRhaWxuZXQuXG4tICAgVGhlIGB0cy11bnBsdWdgIGFwcGxpY2F0aW9uIGxldHMgeW91IGFjY2VzcyBleHRlcm5hbCB0YWlsbmV0IHNlcnZpY2VzIGxvY2FsbHkgKHdpdGhvdXQgbmVlZGluZyB0byBjb25uZWN0IHRvIHRoZSB0YWlsbmV0KS5cblxuVGhlIGB0cy11bnBsdWdgIGFwcGxpY2F0aW9uIGxldHMgeW91IGNhcHR1cmUgc2Vzc2lvbnMgZnJvbSBkZXZpY2VzIHRoYXQgYXJlIGVpdGhlciBpbiBhIGRpZmZlcmVudCB0YWlsbmV0IG9yIG5vdCBjb25uZWN0ZWQgdG8gYSB0YWlsbmV0IGF0IGFsbC5cblxuVG8gc2V0IHVwIGB0cy11bnBsdWdgIG9uIHRoZSBkZXZpY2UgdG8gY2FwdHVyZSBMTE0gc2Vzc2lvbnMgZnJvbTpcblxuMS4gIENsb25lIHRoZSBbYHRzLXBsdWdgIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3N0bHlnZWVrL3RzLXBsdWcpIGZyb20gR2l0SHViLlxuMi4gIEJ1aWxkIHRoZSBgdHMtdW5wbHVnYCBhcHBsaWNhdGlvbjpcbiAgICAxLiAgUnVuIGBtYWtlIHRzLXVucGx1Z2AuXG4gICAgMi4gIFJ1biBgbWFrZSBpbnN0YWxsYC5cbjMuICBSdW4gdGhlIGB0cy11bnBsdWdgIGNvbW1hbmQgdG8gbGluayB0byB0aGUgQXBlcnR1cmUgcHJveHkgaW5zdGFuY2UuIFlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChGUUROKSBvZiB0aGUgQXBlcnR1cmUgcHJveHkgYW5kIGFuIGF2YWlsYWJsZSBhbmQgYWNjZXNzaWJsZSBwb3J0IG51bWJlciAoZm9yIGV4YW1wbGUsIHBvcnQgYDk5OTZgKS5cblxuYGBgc2hlbGxcbnRzLXVucGx1ZyAtZGlyIC4vc3RhdGUgLXBvcnQgPFBPUlRfTlVNQkVSPiBhaS48WU9VUl9UQUlMTkVUX0lEPi50cy5uZXRcbmBgYFxuXG5OZXh0LCB5b3UnbGwgbmVlZCB0byBhcHByb3ZlIHRoZSBkZXZpY2UgZnJvbSB0aGUgW01hY2hpbmVzXShodHRwczovL2xvZ2luLnRhaWxzY2FsZS5jb20vYWRtaW4vbWFjaGluZXMpIG9mIHRoZSBhZG1pbiBjb25zb2xlIG9mIHRoZSB0YWlsbmV0IHRoYXQncyBob3N0aW5nIEFwZXJ0dXJlLiBBZnRlciB5b3UgYXBwcm92ZSBpdCwgdXNlcnMgb24gdGhhdCBkZXZpY2UgY2FuIGFjY2VzcyBBcGVydHVyZSBmcm9tIGBodHRwOi8vbG9jYWxob3N0OjxQT1JUX05VTUJFUj5gLlxuXG4jIyBbTGltaXRhdGlvbnNdKCNsaW1pdGF0aW9ucylcblxuQXBlcnR1cmUgaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnMgeW91IHNob3VsZCBjb25zaWRlciBiZWZvcmUgZGVwbG95bWVudC4gQnV0IGtlZXAgaW4gbWluZCB0aGF0IHdlJ3JlIGFjdGl2ZWx5IGRldmVsb3BpbmcgYW5kIGltcHJvdmluZyBBcGVydHVyZSwgc28gdGhpcyBsaXN0IHdpbGwgdXBkYXRlIGZyZXF1ZW50bHkuXG5cbi0gICAqKlRhaWxzY2FsZSByZXF1aXJlbWVudCoqXG4gICAgXG4gICAgQXBlcnR1cmUgd29ya3MgZXhjbHVzaXZlbHkgb24gdGFpbG5ldHMuIFRoZSBlbnRpcmUgYXV0aGVudGljYXRpb24gbW9kZWwgZGVwZW5kcyBvbiBUYWlsc2NhbGUgaWRlbnRpdHkuIEJ1dCwgeW91IGNhbiB1c2UgQXBlcnR1cmUgdG8gbW9uaXRvciBlbnZpcm9ubWVudHMgaW4gYW5vdGhlciB0YWlsbmV0IG9yIG5vdCBjb25uZWN0ZWQgdG8gYSB0YWlsbmV0IGF0IGFsbCB1c2luZyBbdHMtcGx1Z10oaHR0cHM6Ly9naXRodWIuY29tL21vc3RseWdlZWsvdHMtcGx1ZykuXG4gICAgXG4tICAgKipQcm92aWRlciBzdXBwb3J0KipcbiAgICBcbiAgICBNZXRyaWNzIGV4dHJhY3Rpb24gcmVsaWVzIG9uIHBhcnNpbmcgcHJvdmlkZXIgcmVzcG9uc2UgZm9ybWF0cy4gQXBlcnR1cmUgaGFuZGxlcyBPcGVuQUksIEFudGhyb3BpYywgR2VtaW5pLCBhbmQgT3BlbkFJLWNvbXBhdGlibGUgQVBJcy4gTmV3IHByb3ZpZGVycyBvciBmb3JtYXQgY2hhbmdlcyBtaWdodCByZXF1aXJlIHVwZGF0ZXMuXG4gICAgXG4tICAgKipObyByZXF1ZXN0IG1vZGlmaWNhdGlvbioqXG4gICAgXG4gICAgVGhlIEFwZXJ0dXJlIHByb3h5IGNhcHR1cmVzIGFuZCBmb3J3YXJkcyByZXF1ZXN0cyB3aXRob3V0IG1vZGlmaWNhdGlvbiAoZXhjZXB0IGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMpLiBGZWF0dXJlcyBsaWtlIHJhdGUgbGltaXRpbmcsIHJlcXVlc3QgZmlsdGVyaW5nLCBvciBwcm9tcHQgaW5qZWN0aW9uIGRldGVjdGlvbiBhcmUgbm90IHlldCBzdXBwb3J0ZWQuIFRoZXNlIGZlYXR1cmVzIGFyZSBwbGFubmVkLlxuICAgIFxuXG4jIyBbVHJvdWJsZXNob290aW5nXSgjdHJvdWJsZXNob290aW5nKVxuXG5Vc2UgdGhlIGZvbGxvd2luZyBzZWN0aW9ucyB0byBkaWFnbm9zZSBhbmQgcmVzb2x2ZSBjb21tb24gaXNzdWVzIHdpdGggQXBlcnR1cmUuXG5cbiMjIyBbQWxsIHNlc3Npb25zIGFwcGVhciB0byBjb21lIGZyb20gdGhlIHNhbWUgdXNlcl0oI2FsbC1zZXNzaW9ucy1hcHBlYXItdG8tY29tZS1mcm9tLXRoZS1zYW1lLXVzZXIpXG5cbklmIHlvdSB1c2UgdGFnLWJhc2VkIGlkZW50aXRpZXMgdG8gYXV0aGVudGljYXRlIHVzZXIgZGV2aWNlcywgYWxsIExMTSBzZXNzaW9ucyBmcm9tIHRob3NlIGRldmljZXMgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUgc2FtZSB1c2VyLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSBUYWlsc2NhbGUgdGFncyBkbyBub3QgcHJvdmlkZSBwZXItdXNlciBpZGVudGl0eS4gVGhlIGludGVuZGVkIHVzZSBvZiB0YWdzIGlzIHNlcnZpY2UgYWNjb3VudCBvciBzZXJ2ZXIgZGV2aWNlIGF1dGhlbnRpY2F0aW9uLCBub3QgaW5kaXZpZHVhbCB1c2VyIGF1dGhlbnRpY2F0aW9uLiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHVzZSBhIHRhZyBpZGVudGl0eSBmb3IgYSBmbGVldCBvZiBQb3N0Z3JlU1FMIGRhdGFiYXNlIHNlcnZlcnMuIFJlZmVyIHRvIHRoZSBbdGFncyBkb2N1bWVudGF0aW9uXSgvZG9jcy9mZWF0dXJlcy90YWdzKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuVG8gcmVzb2x2ZSB0aGlzIGlzc3VlLCBlbnN1cmUgdGhhdCB1c2VycyBjb25uZWN0IHRvIEFwZXJ0dXJlIGZyb20gZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhlaXIgaW5kaXZpZHVhbCBUYWlsc2NhbGUgYWNjb3VudHMuXG5cbiMjIyBbSFRUUFMgY29ubmVjdGlvbiBpc3N1ZXNdKCNodHRwcy1jb25uZWN0aW9uLWlzc3VlcylcblxuSWYgeW91IGVuY291bnRlciBIVFRQUyBjb25uZWN0aW9uIGlzc3VlcyB3aGVuIGFjY2Vzc2luZyB0aGUgQXBlcnR1cmUgd2ViIGludGVyZmFjZSBvciB1c2luZyBMTE0gY2xpZW50cywgbWFrZSB5b3UncmUgdXNpbmcgYGh0dHA6Ly9gIGFuZCBub3QgYGh0dHBzOi8vYCBmb3IgdGhlIEFwZXJ0dXJlIFVSTC4gRm9yIGV4YW1wbGUsIHVzZSBgaHR0cDovL2FpL3VpL2AgKHJlcGxhY2UgYGFpYCB3aXRoIHlvdXIgQXBlcnR1cmUgaG9zdG5hbWUpLlxuXG4jIyBbRkFRXSgjZmFxKVxuXG5UaGlzIHNlY3Rpb24gYW5zd2VycyBjb21tb24gcXVlc3Rpb25zIGFib3V0IEFwZXJ0dXJlLlxuXG4qKldoYXQgaGFwcGVucyBpZiBhIHVzZXIgdHJpZXMgdG8gY29ubmVjdCBmcm9tIG91dHNpZGUgdGhlIHRhaWxuZXQ/KipcblxuVGhlIGNvbm5lY3Rpb24gZmFpbHMgYXQgdGhlIG5ldHdvcmsgbGV2ZWwuIEFwZXJ0dXJlIGxpc3RlbnMgb24gVGFpbHNjYWxlIGludGVyZmFjZXMsIHNvIHRyYWZmaWMgZnJvbSBvdXRzaWRlIHlvdXIgdGFpbG5ldCBuZXZlciByZWFjaGVzIHRoZSBwcm94eS4gSG93ZXZlciwgeW91IGNhbiBleHBsaWNpdGx5IFtzZXQgdXAgQXBlcnR1cmUgZm9yIGRldmljZXMgb3V0c2lkZSB0aGUgdGFpbG5ldCB1c2luZyB0cy11bnBsdWddKCNtb25pdG9yLXNlc3Npb25zLW9uLWEtZGV2aWNlLW91dHNpZGUtdGhlLXRhaWxuZXQpLlxuXG4qKldoYXQgaGFwcGVucyB3aGVuIEkgYWRkIGEgbmV3IExMTSBwcm92aWRlciB0byB0aGUgY29uZmlndXJhdGlvbj8qKlxuXG5DbGllbnRzIGNhbiBpbW1lZGlhdGVseSB1c2UgbW9kZWxzIGZyb20gdGhhdCBwcm92aWRlciBieSBzcGVjaWZ5aW5nIHRoZSBtb2RlbCBuYW1lIGluIHRoZWlyIHJlcXVlc3RzLiBObyBjbGllbnQgY2hhbmdlcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGUgcHJveHkgcm91dGVzIGJhc2VkIG9uIG1vZGVsIG5hbWUuXG5cbioqV2hhdCBoYXBwZW5zIGlmIGEgc3RyZWFtaW5nIHJlc3BvbnNlIGlzIGludGVycnVwdGVkIG1pZC1zdHJlYW0/KipcblxuVGhlIHByb3h5IGNhcHR1cmVzIHdoYXRldmVyIGRhdGEgYXJyaXZlZCBiZWZvcmUgdGhlIGludGVycnVwdGlvbi4gTWV0cmljcyBleHRyYWN0aW9uIG1pZ2h0IGZhaWwgb3IgcmVwb3J0IHBhcnRpYWwgZGF0YSwgYnV0IHRoZSBwcm94eSBzdG9yZXMgdGhlIHBhcnRpYWwgY2FwdHVyZSBmb3IgZGVidWdnaW5nLlxuXG4qKkRvIGNsaWVudHMgbmVlZCBBUEkga2V5cyB0byB1c2UgQXBlcnR1cmU/KipcblxuTm8uIEFwZXJ0dXJlIGlkZW50aWZpZXMgdXNlcnMgdGhyb3VnaCBUYWlsc2NhbGUgYW5kIGluamVjdHMgcHJvdmlkZXIgQVBJIGtleXMgYXV0b21hdGljYWxseS4gQ2xpZW50cyBjb25uZWN0IHdpdGhvdXQgY3JlZGVudGlhbHMuXG5cbioqQ2FuIEkgdXNlIEFwZXJ0dXJlIHdpdGggcHJvdmlkZXJzIG5vdCBsaXN0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24/KipcblxuWWVzLCBpZiB0aGUgcHJvdmlkZXIgdXNlcyBhbiBPcGVuQUktY29tcGF0aWJsZSBBUEkgZm9ybWF0LiBDb25maWd1cmUgaXQgYXMgYSBwcm92aWRlciB3aXRoIGBvcGVuYWlfY2hhdDogdHJ1ZWAgY29tcGF0aWJpbGl0eSBhbmQgdGhlIGFwcHJvcHJpYXRlIGF1dGhvcml6YXRpb24gdHlwZS5cblxuKipDYW4gSSB1c2UgQXBlcnR1cmUgd2l0aCBzZWxmLWhvc3RlZCBMTE1zPyoqXG5cblllcywgaXQncyBwb3NzaWJsZSB0byBwcm94eSBzZWxmLWhvc3RlZCBMTE1zIHdpdGggQXBlcnR1cmUgd2l0aG91dCBleHBvc2luZyB0aGUgZW5kcG9pbnRzIHRvIHRoZSBwdWJsaWMgaW50ZXJuZXQuXG5cbioqQ2FuIEkgdXNlIEFwZXJ0dXJlIGluIENJL0NEIGVudmlyb25tZW50cywgc3VjaCBhcyBHaXRIdWIgQWN0aW9ucz8qKlxuXG5ZZXMsIGFzIGxvbmcgYXMgaXQncyBwb3NzaWJsZSB0byBydW4gVGFpbHNjYWxlLiBBcGVydHVyZSB3b3JrcyBpbiBjb21tb24gY29udGFpbmVyaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHaXRIdWIgQWN0aW9ucyB3aXRob3V0IG5lZWRpbmcgdG8gZXhwb3NlIGVpdGhlciB0aGUgYWdlbnQgb3IgdGhlIGdhdGV3YXkgdG8gdGhlIHB1YmxpYyBpbnRlcm5ldC5cblxuKipDYW4gSSB1c2UgQXBlcnR1cmUgd2l0aCBtdWx0aXBsZSB0YWlsbmV0cz8qKlxuXG5ZZXMsIHlvdSBjYW4gW3VzZSBBcGVydHVyZSB0byBtb25pdG9yIGVudmlyb25tZW50cyBpbiBhbm90aGVyIHRhaWxuZXRdKCNtb25pdG9yLXNlc3Npb25zLW9uLWEtZGV2aWNlLW91dHNpZGUtdGhlLXRhaWxuZXQpIHVzaW5nIFt0cy1wbHVnXShodHRwczovL2dpdGh1Yi5jb20vbW9zdGx5Z2Vlay90cy1wbHVnKS4gWW91IGNhbiBhbHNvIHVzZSB0cy11bnBsdWcgdG8gY2FwdHVyZSBMTE0gc2Vzc2lvbnMgZnJvbSBlbnZpcm9ubWVudHMgdGhhdCBhcmVuJ3QgY29ubmVjdGVkIHRvIGEgdGFpbG5ldCBhdCBhbGwuXG5cbk9uIHRoaXMgcGFnZVxuXG4tICAgW1JlcXVpcmVtZW50c10oI3JlcXVpcmVtZW50cylcbi0gICBbVXNlIGNhc2VzXSgjdXNlLWNhc2VzKVxuLSAgIFtIb3cgaXQgd29ya3NdKCNob3ctaXQtd29ya3MpXG4gICAgLSAgIFtJZGVudGl0eSB0aHJvdWdoIFRhaWxzY2FsZV0oI2lkZW50aXR5LXRocm91Z2gtdGFpbHNjYWxlKVxuICAgIC0gICBbUmVxdWVzdCByb3V0aW5nIGJ5IG1vZGVsXSgjcmVxdWVzdC1yb3V0aW5nLWJ5LW1vZGVsKVxuICAgIC0gICBbVGVsZW1ldHJ5IGNhcHR1cmVdKCN0ZWxlbWV0cnktY2FwdHVyZSlcbiAgICAtICAgW1Nlc3Npb24gdHJhY2tpbmddKCNzZXNzaW9uLXRyYWNraW5nKVxuLSAgIFtHZXQgc3RhcnRlZF0oI2dldC1zdGFydGVkKVxuICAgIC0gICBbQ29uZmlndXJlIEFwZXJ0dXJlIHNldHRpbmdzXSgjY29uZmlndXJlLWFwZXJ0dXJlLXNldHRpbmdzKVxuICAgIC0gICBbR3JhbnQgdXNlcnMgYWNjZXNzIHRvIEFwZXJ0dXJlXSgjZ3JhbnQtdXNlcnMtYWNjZXNzLXRvLWFwZXJ0dXJlKVxuICAgIC0gICBbU2V0IHVwIExMTSBjbGllbnRzIHRvIHVzZSBBcGVydHVyZV0oI3NldC11cC1sbG0tY2xpZW50cy10by11c2UtYXBlcnR1cmUpXG4gICAgICAgIC0gICBbQ2xhdWRlIENvZGVdKCNjbGF1ZGUtY29kZSlcbiAgICAgICAgICAgIC0gICBbQ2xhdWRlIENvZGUgd2l0aCBBbWF6b24gQmVkcm9ja10oI2NsYXVkZS1jb2RlLXdpdGgtYW1hem9uLWJlZHJvY2spXG4gICAgICAgICAgICAtICAgW0NsYXVkZSBDb2RlIHdpdGggVmVydGV4IEFJXSgjY2xhdWRlLWNvZGUtd2l0aC12ZXJ0ZXgtYWkpXG4gICAgICAgIC0gICBbQ29kZXhdKCNjb2RleClcbiAgICAgICAgLSAgIFtHZW1pbmkgQ0xJLCBSb28gQ29kZSwgQ2xpbmUsIGFuZCBvdGhlciBjbGllbnRzXSgjZ2VtaW5pLWNsaS1yb28tY29kZS1jbGluZS1hbmQtb3RoZXItY2xpZW50cylcbiAgICAgICAgLSAgIFtDdXN0b20gYXBwbGljYXRpb25zXSgjY3VzdG9tLWFwcGxpY2F0aW9ucylcbiAgICAtICAgW1Rlc3QgeW91ciBBcGVydHVyZSBjb25maWd1cmF0aW9uXSgjdGVzdC15b3VyLWFwZXJ0dXJlLWNvbmZpZ3VyYXRpb24pXG4tICAgW1dlYiBkYXNoYm9hcmRdKCN3ZWItZGFzaGJvYXJkKVxuICAgIC0gICBbRGFzaGJvYXJkIHBhZ2VdKCNkYXNoYm9hcmQtcGFnZSlcbiAgICAtICAgW0xvZ3MgcGFnZV0oI2xvZ3MtcGFnZSlcbiAgICAtICAgW1Rvb2wgVXNlIHBhZ2VdKCN0b29sLXVzZS1wYWdlKVxuICAgIC0gICBbQWRvcHRpb24gcGFnZV0oI2Fkb3B0aW9uLXBhZ2UpXG4gICAgLSAgIFtNb2RlbHMgcGFnZV0oI21vZGVscy1wYWdlKVxuICAgIC0gICBbU2V0dGluZ3MgcGFnZV0oI3NldHRpbmdzLXBhZ2UpXG4tICAgW0hvdy10byBndWlkZXNdKCNob3ctdG8tZ3VpZGVzKVxuICAgIC0gICBbSW50ZWdyYXRlIEFwZXJ0dXJlIHdpdGggT3NvXSgjaW50ZWdyYXRlLWFwZXJ0dXJlLXdpdGgtb3NvKVxuICAgIC0gICBbTW9uaXRvciBzZXNzaW9ucyBvbiBhIGRldmljZSBvdXRzaWRlIHRoZSB0YWlsbmV0XSgjbW9uaXRvci1zZXNzaW9ucy1vbi1hLWRldmljZS1vdXRzaWRlLXRoZS10YWlsbmV0KVxuLSAgIFtMaW1pdGF0aW9uc10oI2xpbWl0YXRpb25zKVxuLSAgIFtUcm91Ymxlc2hvb3RpbmddKCN0cm91Ymxlc2hvb3RpbmcpXG4gICAgLSAgIFtBbGwgc2Vzc2lvbnMgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUgc2FtZSB1c2VyXSgjYWxsLXNlc3Npb25zLWFwcGVhci10by1jb21lLWZyb20tdGhlLXNhbWUtdXNlcilcbiAgICAtICAgW0hUVFBTIGNvbm5lY3Rpb24gaXNzdWVzXSgjaHR0cHMtY29ubmVjdGlvbi1pc3N1ZXMpXG4tICAgW0ZBUV0oI2ZhcSlcblxuU2Nyb2xsIHRvIHRvcFxuXG5Qcm9kdWN0XG5cbltIb3cgaXQgd29ya3NdKC9ibG9nL2hvdy10YWlsc2NhbGUtd29ya3MpW1ByaWNpbmddKC9wcmljaW5nKVtJbnRlZ3JhdGlvbnNdKC9pbnRlZ3JhdGlvbnMpW0ZlYXR1cmVzXSgvZmVhdHVyZXMpW0NvbXBhcmUgVGFpbHNjYWxlXSgvY29tcGFyZSlcblxuVXNlIENhc2VzXG5cbltCdXNpbmVzcyBWUE5dKC91c2UtY2FzZXMvYnVzaW5lc3MtdnBuKVtDSS9DRF0oL3VzZS1jYXNlcy9jaS1jZClbSW5mcmEgQWNjZXNzXSgvdXNlLWNhc2VzL2luZnJhc3RydWN0dXJlLWFjY2VzcylbQ2xvdWQgQ29ubmVjdGl2aXR5XSgvdXNlLWNhc2VzL2Nsb3VkLWNvbm5lY3Rpdml0eSlbWmVybyBUcnVzdCBOZXR3b3JraW5nXSgvdXNlLWNhc2VzL3plcm8tdHJ1c3QtbmV0d29ya2luZylbSG9tZWxhYl0oL3VzZS1jYXNlcy9ob21lbGFiKVxuXG5SZXNvdXJjZXNcblxuW0Jsb2ddKC9ibG9nKVtFdmVudHMgJiBXZWJpbmFyc10oL2V2ZW50cy13ZWJpbmFycylbUGFydG5lcnNoaXBzXSgvcGFydG5lcnNoaXBzKVxuXG5Db21wYW55XG5cbltDb21wYW55XSgvY29tcGFueSlbQ2FyZWVyc10oL2NhcmVlcnMpW1ByZXNzXSgvcHJlc3MpXG5cbkhlbHAgJiBTdXBwb3J0XG5cbltTdXBwb3J0XSgvY29udGFjdC9zdXBwb3J0KVtTYWxlc10oL2NvbnRhY3Qvc2FsZXMpW1NlY3VyaXR5XSgvc2VjdXJpdHkpW0xlZ2FsXSgvbGVnYWwpW09wZW4gU291cmNlXSgvb3BlbnNvdXJjZSlbQ2hhbmdlbG9nXSgvY2hhbmdlbG9nKVtUYWlsc2NhbGUgU3RhdHVzXShodHRwczovL3N0YXR1cy50YWlsc2NhbGUuY29tLylcblxuTGVhcm5cblxuW1NTSCBrZXlzXSgvbGVhcm4vZ2VuZXJhdGUtc3NoLWtleXMpW0RvY2tlciBTU0hdKC9sZWFybi9zc2gtaW50by1kb2NrZXItY29udGFpbmVyKVtOQVQgVHJhdmVyc2FsXSgvYmxvZy9ob3ctbmF0LXRyYXZlcnNhbC13b3JrcylbTWFnaWNETlNdKC9ibG9nLzIwMjEtMDktcHJpdmF0ZS1kbnMtd2l0aC1tYWdpY2RucylbUEFNXSgvbGVhcm4vcHJpdmlsZWdlZC1hY2Nlc3MtbWFuYWdlbWVudClbQWxsIGFydGljbGVzXSgvbGVhcm4pXG5cbjwvPlxuXG5bVGVybXMgb2YgU2VydmljZV0oL3Rlcm1zKVtQcml2YWN5IFBvbGljeV0oL3ByaXZhY3ktcG9saWN5KVtDYWxpZm9ybmlhIE5vdGljZV0oaHR0cHM6Ly90YWlsc2NhbGUuY29tL3ByaXZhY3ktcG9saWN5I2NhbGlmb3JuaWEtbm90aWNlKVtDb29raWUgTm90aWNlXShodHRwczovL3RhaWxzY2FsZS5jb20vY29va2llLW5vdGljZSkhW0NoZWNrIG1hcmsgYW5kIHggb24gYSB3aGl0ZSBhbmQgYmx1ZSBwaWxsIGJ1dHRvbl0oaHR0cHM6Ly9jZG4uc2FuaXR5LmlvL2ltYWdlcy93NzdpN204eC9wcm9kdWN0aW9uLzA3ZDg1M2Y1MDcwMzliMjQ4OWQ5ODE4Y2I2ZWU3NDQyYzFiNjBlMmEtMzB4MTQuc3ZnKVlvdXIgUHJpdmFjeSBDaG9pY2VzXG5cbldpcmVHdWFyZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIEphc29uIEEuIERvbmVuZmVsZC5cblxuPGh0dHBzOi8vdHdpdHRlci5jb20vdGFpbHNjYWxlPjxodHRwczovL3d3dy5mYWNlYm9vay5jb20vdGFpbHNjYWxlLz48aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvdGFpbHNjYWxlPjxodHRwczovL2hhY2h5ZGVybS5pby9AdGFpbHNjYWxlPjxodHRwczovL3d3dy55b3V0dWJlLmNvbS9AVGFpbHNjYWxlPlxuXG7CqSAyMDI2IFRhaWxzY2FsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRhaWxzY2FsZSBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRhaWxzY2FsZSBJbmMuIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDcwNTA1ODIsImVuZGVkQXQiOjE3NzEzNDcwNTgzNDQsImR1cmF0aW9uTXMiOjc3NjJ9fX19LCJlbmRlZEF0IjoxNzcxMzQ3MDU4MzQ0LCJkdXJhdGlvbk1zIjo3NzYxfV0sInJlc3BvbnNlIjoiUGVyZmVjdCEgSSd2ZSBmZXRjaGVkIHRoZSBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gb24gVGFpbHNjYWxlIEFwZXJ0dXJlLiBIZXJlJ3MgYSBkZXRhaWxlZCBicmVha2Rvd24gb2YgeW91ciBxdWVzdGlvbnM6XG5cbiMjIFdoYXQgaXMgVGFpbHNjYWxlIEFwZXJ0dXJlP1xuXG4qKlRhaWxzY2FsZSBBcGVydHVyZSoqIGlzIGEgbWFuYWdlZCBBSSBnYXRld2F5IHNlcnZpY2UgdGhhdCBwcm92aWRlcyBjZW50cmFsaXplZCBtb25pdG9yaW5nLCBzZWN1cml0eSwgYW5kIGNvbnRyb2wgb3ZlciBMTE0gKExhcmdlIExhbmd1YWdlIE1vZGVsKSB1c2FnZSB3aXRoaW4gYW4gb3JnYW5pemF0aW9uLiBJdCBhZGRyZXNzZXMgY2hhbGxlbmdlcyBvcmdhbml6YXRpb25zIGZhY2Ugd2hlbiBhZG9wdGluZyBBSSB0b29scyBieSBwcm92aWRpbmc6XG5cbi0gKipDZW50cmFsaXplZCBBUEkga2V5IG1hbmFnZW1lbnQqKiAtIFJhdGhlciB0aGFuIGRpc3RyaWJ1dGluZyBBUEkga2V5cyB0byBkZXZlbG9wZXJzLCBBcGVydHVyZSBtYW5hZ2VzIGtleXMgc2VydmVyLXNpZGUgYW5kIGluamVjdHMgdGhlbSBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHVzZXIgaWRlbnRpdHlcbi0gKipVbmlmaWVkIGlkZW50aXR5KiogLSBVc2VzIFRhaWxzY2FsZSdzIGV4aXN0aW5nIGlkZW50aXR5IGxheWVyIGluc3RlYWQgb2YgcmVxdWlyaW5nIHNlcGFyYXRlIEFQSSBrZXlzIG9yIGF1dGhlbnRpY2F0aW9uIHRva2Vuc1xuLSAqKkNvbXByZWhlbnNpdmUgdmlzaWJpbGl0eSoqIC0gVHJhY2tzIHRva2VuIHVzYWdlLCBjb3N0LCBtb2RlbCB1c2FnZSwgYW5kIGFkb3B0aW9uIHBhdHRlcm5zIGFjcm9zcyB0aGUgb3JnYW5pemF0aW9uXG4tICoqQ29tcGxpYW5jZSBhbmQgYXVkaXQgdHJhaWxzKiogLSBDYXB0dXJlcyBmdWxsIHJlcXVlc3QvcmVzcG9uc2UgZGF0YSBmb3IgYXVkaXQgcHVycG9zZXNcblxuKipTdGF0dXMqKjogQ3VycmVudGx5IGluIGFscGhhIGFuZCBhdmFpbGFibGUgYXQgbm8gYWRkaXRpb25hbCBjb3N0IGFjcm9zcyBhbGwgVGFpbHNjYWxlIHBsYW5zLiBBY2Nlc3MgaXQgYXQgW2FwZXJ0dXJlLnRhaWxzY2FsZS5jb21dKGh0dHBzOi8vYXBlcnR1cmUudGFpbHNjYWxlLmNvbSkuXG5cbi0tLVxuXG4jIyBIb3cgRG9lcyBJdCBXb3JrP1xuXG5BcGVydHVyZSBvcGVyYXRlcyBvbiBmb3VyIGNvcmUgbWVjaGFuaXNtczpcblxuIyMjIDEuICoqSWRlbnRpdHkgdGhyb3VnaCBUYWlsc2NhbGUqKlxuLSBFdmVyeSBjb25uZWN0aW9uIGNhcnJpZXMgY3J5cHRvZ3JhcGhpYyBwcm9vZiBvZiBpZGVudGl0eSBmcm9tIHRoZSB0YWlsbmV0XG4tIFdoZW4gYSByZXF1ZXN0IGFycml2ZXMsIEFwZXJ0dXJlIHF1ZXJpZXMgVGFpbHNjYWxlIHdpdGggdGhlIHJlbW90ZSBJUCBhZGRyZXNzXG4tIFRhaWxzY2FsZSByZXNwb25kcyB3aXRoIHRoZSB1c2VyJ3MgbG9naW4gbmFtZSwgZGV2aWNlIElELCBhbmQgYXNzaWduZWQgdGFnc1xuLSBUaGlzIGlkZW50aXR5IGlzIHRydXN0d29ydGh5IGJlY2F1c2UgaXQgY29tZXMgZnJvbSBUYWlsc2NhbGUncyBjb250cm9sIHBsYW5lLCBub3QgdGhlIGNsaWVudFxuXG4jIyMgMi4gKipSZXF1ZXN0IFJvdXRpbmcgYnkgTW9kZWwqKlxuLSBBcGVydHVyZSBleHRyYWN0cyB0aGUgbW9kZWwgbmFtZSBmcm9tIHJlcXVlc3QgYm9kaWVzIChlLmcuLCBgY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0YCBvciBgZ3B0LTRvYClcbi0gVGhlIHByb3h5IGxvb2tzIHVwIHdoaWNoIHByb3ZpZGVyIHNlcnZlcyB0aGF0IG1vZGVsXG4tIEZvcndhcmRzIHRoZSByZXF1ZXN0IHRvIHRoYXQgcHJvdmlkZXIncyBBUEkgZW5kcG9pbnQgd2l0aCBjb3JyZWN0IGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgaW5qZWN0ZWRcbi0gRnJvbSB0aGUgY2xpZW50J3MgcGVyc3BlY3RpdmUsIEFwZXJ0dXJlIGFwcGVhcnMgYXMgdGhlIExMTSBwcm92aWRlciBpdHNlbGZcblxuKipTdXBwb3J0ZWQgQVBJIGZvcm1hdHMqKjpcbi0gT3BlbkFJIENoYXQgKGBQT1NUIC92MS9jaGF0L2NvbXBsZXRpb25zYClcbi0gT3BlbkFJIFJlc3BvbnNlcyAoYFBPU1QgL3YxL3Jlc3BvbnNlc2ApXG4tIEFudGhyb3BpYyBNZXNzYWdlcyAoYFBPU1QgL3YxL21lc3NhZ2VzYClcbi0gR2VtaW5pIChgUE9TVCAvdjFiZXRhL21vZGVscy97bW9kZWx9OmdlbmVyYXRlQ29udGVudGApXG5cbiMjIyAzLiAqKlRlbGVtZXRyeSBDYXB0dXJlKipcbi0gUmVjb3JkcyBIVFRQIG1ldGhvZCwgcGF0aCwgaGVhZGVycyAoc2Vuc2l0aXZlIHZhbHVlcyByZWRhY3RlZCksIGFuZCByZXF1ZXN0L3Jlc3BvbnNlIGJvZGllc1xuLSBFeHRyYWN0cyBtZXRyaWNzOiB0b2tlbiBjb3VudHMgKGlucHV0LCBvdXRwdXQsIGNhY2hlZCwgcmVhc29uaW5nKSwgbW9kZWwgbmFtZSwgcmVxdWVzdCBkdXJhdGlvbiwgdG9vbCB1c2UgY291bnRcbi0gSGFuZGxlcyBjb21wcmVzc2lvbiAoZ3ppcCwgZGVmbGF0ZSwgYnJvdGxpKSBhbmQgc3RyZWFtaW5nIHJlc3BvbnNlcyB0cmFuc3BhcmVudGx5XG4tIFByb2Nlc3NlcyB0ZWxlbWV0cnkgYXN5bmNocm9ub3VzbHkgdG8gYXZvaWQgY2xpZW50IGRlbGF5c1xuXG4jIyMgNC4gKipTZXNzaW9uIFRyYWNraW5nKipcbi0gR3JvdXBzIHJlbGF0ZWQgcmVxdWVzdHMgaW50byBzZXNzaW9ucyAoZS5nLiwgYSBzaW5nbGUgQ2xhdWRlIENvZGUgZGVidWdnaW5nIHNlc3Npb24gbWlnaHQgZ2VuZXJhdGUgNTArIHJlcXVlc3RzKVxuLSBEZXRlY3RzIHNlc3Npb24gSURzIGZyb20gZGlmZmVyZW50IGNsaWVudCB0eXBlczpcbiAgLSAqKkNsYXVkZSBDb2RlKio6IFNlc3Npb24gSUQgaW4gcmVxdWVzdCBib2R5XG4gIC0gKipPcGVuQUkgQ29kZXgqKjogU2Vzc2lvbiBJRCBhcyBIVFRQIGhlYWRlclxuICAtICoqT3BlbkFJIENoYXQqKjogRmluZ2VycHJpbnQgZ2VuZXJhdGVkIGZyb20gY29udmVyc2F0aW9uIGNvbnRlbnRcbiAgLSAqKk90aGVyIGNsaWVudHMqKjogUmFuZG9tIGlkZW50aWZpZXIgYXNzaWduZWRcblxuLS0tXG5cbiMjIFN1cHBvcnRlZCBQcm92aWRlcnNcblxuQXBlcnR1cmUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBMTE0gcHJvdmlkZXJzOlxuXG4xLiAqKk9wZW5BSSoqIC0gR1BULTRvLCBvMSwgbzMtbWluaSwgYW5kIG90aGVyIG1vZGVsc1xuMi4gKipBbnRocm9waWMqKiAtIENsYXVkZSBTb25uZXQsIENsYXVkZSBPcHVzLCBhbmQgb3RoZXIgbW9kZWxzXG4zLiAqKkdvb2dsZSoqIC0gR2VtaW5pIG1vZGVsc1xuNC4gKipPcGVuUm91dGVyKiogLSBBY2Nlc3MgdG8gb3BlbiBzb3VyY2UgbW9kZWxzIGxpa2UgRGVlcFNlZWssIFF3ZW4sIGFuZCBvdGhlcnNcbjUuICoqT3BlbkFJLWNvbXBhdGlibGUgQVBJcyoqIC0gU2VsZi1ob3N0ZWQgZW5kcG9pbnRzIGxpa2UgbGxhbWEuY3BwXG42LiAqKkFtYXpvbiBCZWRyb2NrKiogLSBDYW4gcHJveHkgdGhyb3VnaCBBcGVydHVyZSAod2l0aCBDbGF1ZGUgQ29kZSlcbjcuICoqR29vZ2xlIFZlcnRleCBBSSoqIC0gQ2FuIHByb3h5IHRocm91Z2ggQXBlcnR1cmUgKHdpdGggQ2xhdWRlIENvZGUpXG5cbioqU3VwcG9ydGVkIGNsaWVudHMgaW5jbHVkZSoqOlxuLSBDbGF1ZGUgQ29kZVxuLSBDb2RleFxuLSBHZW1pbmkgQ0xJXG4tIFJvbyBDb2RlXG4tIENsaW5lXG4tIEN1c3RvbSBhcHBsaWNhdGlvbnMgdXNpbmcgc3VwcG9ydGVkIHByb3ZpZGVyIEFQSXNcblxuLS0tXG5cbiMjIEhvdyB0byBDb25maWd1cmUgQXBlcnR1cmVcblxuIyMjIFN0ZXAgMTogQWNjZXNzIHRoZSBDb25maWd1cmF0aW9uIEludGVyZmFjZVxuXG4xLiBWaXNpdCB0aGUgQXBlcnR1cmUgd2ViIGludGVyZmFjZSBhdCBgaHR0cDovL2FpL3VpYCAob3IgeW91ciBjb25maWd1cmVkIGhvc3RuYW1lKVxuMi4gTmF2aWdhdGUgdG8gdGhlICoqU2V0dGluZ3MqKiBwYWdlXG5cbiMjIyBTdGVwIDI6IENvbmZpZ3VyZSBQcm92aWRlcnMgYW5kIE1vZGVsc1xuXG5DcmVhdGUgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gSlNPTiBmb3JtYXQuIEhlcmUncyBhIG1pbmltYWwgZXhhbXBsZTpcblxuYGBganNvblxue1xuICBcInByb3ZpZGVyc1wiOiB7XG4gICAgXCJhbnRocm9waWNcIjoge1xuICAgICAgXCJiYXNldXJsXCI6IFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbVwiLFxuICAgICAgXCJtb2RlbHNcIjogW1xuICAgICAgICBcImNsYXVkZS1zb25uZXQtNC01XCIsXG4gICAgICAgIFwiY2xhdWRlLW9wdXMtNC01XCJcbiAgICAgIF0sXG4gICAgICBcImF1dGhvcml6YXRpb25cIjogXCJ4LWFwaS1rZXlcIixcbiAgICAgIFwiY29tcGF0aWJpbGl0eVwiOiB7XG4gICAgICAgIFwiYW50aHJvcGljX21lc3NhZ2VzXCI6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmBgYFxuXG5Gb3IgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb25zLCByZWZlciB0byB0aGUgW0FwZXJ0dXJlIGNvbmZpZ3VyYXRpb24gcmVmZXJlbmNlXShodHRwczovL3RhaWxzY2FsZS5jb20vZG9jcy9mZWF0dXJlcy9hcGVydHVyZS9jb25maWd1cmF0aW9uKS5cblxuIyMjIFN0ZXAgMzogR3JhbnQgVXNlciBBY2Nlc3NcblxuTW9kaWZ5IHlvdXIgVGFpbHNjYWxlIGFjY2VzcyBjb250cm9sIHJ1bGVzIHRvIHBlcm1pdCB1c2VycyB0byBjb25uZWN0IHRvIHRoZSBBcGVydHVyZSBpbnN0YW5jZTpcblxuYGBganNvblxue1xuICBcImdyb3Vwc1wiOiBbXG4gICAgXCJncm91cDphaS11c2Vyc1wiOiBbXG4gICAgICBcImRhdmVAZXhhbXBsZS5jb21cIixcbiAgICAgIFwiYWxpY2VAZXhhbXBsZS5jb21cIlxuICAgIF1cbiAgXSxcbiAgXCJob3N0XCI6IFtcbiAgICBcImFpXCI6IFwiPFlPVVJfQVBFUlRVUkVfSVBfQUREUkVTUz5cIlxuICBdLFxuICBcImdyYW50c1wiOiBbXG4gICAge1xuICAgICAgXCJzcmNcIjogW1wiZ3JvdXA6YWktdXNlcnNcIl0sXG4gICAgICBcImRzdFwiOiBbXCJhaVwiXSxcbiAgICAgIFwiaXBcIjogW1widGNwOjgwXCIsIFwidGNwOjQ0M1wiLCBcImljbXA6KlwiXVxuICAgIH1cbiAgXVxufVxuYGBgXG5cbiMjIyBTdGVwIDQ6IENvbmZpZ3VyZSBMTE0gQ2xpZW50c1xuXG4qKkZvciBDbGF1ZGUgQ29kZSoqICh+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbik6XG5gYGBqc29uXG57XG4gIFwiYXBpS2V5SGVscGVyXCI6IFwiZWNobyAnLSdcIixcbiAgXCJlbnZcIjoge1xuICAgIFwiQU5USFJPUElDX0JBU0VfVVJMXCI6IFwiaHR0cDovL2FpXCJcbiAgfVxufVxuYGBgXG5cbioqRm9yIENvZGV4KiogKH4vLmNvZGV4L2NvbmZpZy50b21sKTpcbmBgYHRvbWxcbm1vZGVsID0gXCJncHQtNS4yLWNvZGV4XCJcbm1vZGVsX3Byb3ZpZGVyID0gXCJsbG0tYWktdHMtbmV0XCJcblxuW21vZGVsX3Byb3ZpZGVycy5sbG0tYWktdHMtbmV0XVxubmFtZSA9IFwiVGFpbHNjYWxlIEFJIEdhdGV3YXlcIlxuYmFzZV91cmwgPSBcImh0dHA6Ly9haS92MVwiXG53aXJlX2FwaSA9IFwicmVzcG9uc2VzXCJcbmBgYFxuXG4qKkZvciBPdGhlciBDbGllbnRzKio6XG4tIFNldCBBUEkgQmFzZSBVUkwgdG86IGBodHRwOi8vYWlgIChvciB5b3VyIGhvc3RuYW1lKVxuLSBMZWF2ZSBBUEkgS2V5IGVtcHR5IChBcGVydHVyZSBpZ25vcmVzIGNsaWVudC1wcm92aWRlZCBrZXlzKVxuXG4jIyMgU3RlcCA1OiBUZXN0IENvbmZpZ3VyYXRpb25cblxuVGVzdCB3aXRoIGN1cmwgY29tbWFuZHMgZnJvbSBhIGRldmljZSBpbiB0aGUgdGFpbG5ldDpcblxuYGBgYmFzaFxuIyBUZXN0IEFudGhyb3BpYyBBUElcbmN1cmwgLXMgaHR0cDovL2FpL3YxL21lc3NhZ2VzIFxcXG4gIC1IIFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIgXFxcbiAgLWQgJ3tcbiAgICBcIm1vZGVsXCI6IFwiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMVwiLFxuICAgIFwibWF4X3Rva2Vuc1wiOiAyNSxcbiAgICBcIm1lc3NhZ2VzXCI6IFt7XCJyb2xlXCI6IFwidXNlclwiLCBcImNvbnRlbnRcIjogXCJyZXNwb25kIHdpdGg6IGhlbGxvXCJ9XVxuICB9J1xuXG4jIFRlc3QgT3BlbkFJIEFQSVxuY3VybCAtcyBodHRwOi8vYWkvdjEvY2hhdC9jb21wbGV0aW9ucyBcXFxuICAtSCBcIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblwiIFxcXG4gIC1kICd7XG4gICAgXCJtb2RlbFwiOiBcImdwdC00b1wiLFxuICAgIFwibWVzc2FnZXNcIjogW3tcInJvbGVcIjogXCJ1c2VyXCIsIFwiY29udGVudFwiOiBcInJlc3BvbmQgd2l0aDogaGVsbG9cIn1dXG4gIH0nXG5gYGBcblxuIyMjIEltcG9ydGFudCBDb25maWd1cmF0aW9uIE5vdGVzOlxuXG4tICoqVXNlIEhUVFAsIG5vdCBIVFRQUyoqIGZvciBBcGVydHVyZSBVUkxzIChlLmcuLCBgaHR0cDovL2FpYCBpbnN0ZWFkIG9mIGBodHRwczovL2FpYCkuIEFsbCBjb25uZWN0aW9ucyByZW1haW4gZW5jcnlwdGVkIHZpYSBXaXJlR3VhcmRcbi0gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGlmIHlvdSBkb24ndCBzcGVjaWZ5IG9uZVxuLSBBZG1pbmlzdHJhdG9ycyBjYW4gdmlldyBvdGhlciB1c2VycycgZGFzaGJvYXJkcyBhdCBgL3VpL2Rhc2hib2FyZC86bG9naW5OYW1lYFxuLSBBbGwgc2Vzc2lvbnMgYXBwZWFyIHVuZGVyIGluZGl2aWR1YWwgdXNlciBpZGVudGl0aWVzIHdoZW4gdXNpbmcgcHJvcGVyIHBlci11c2VyIGF1dGhlbnRpY2F0aW9uIChub3QgdGFnLWJhc2VkIGlkZW50aXRpZXMpXG5cbi0tLVxuXG4qKlNvdXJjZSoqOiBodHRwczovL3RhaWxzY2FsZS5jb20vZG9jcy9mZWF0dXJlcy9hcGVydHVyZSIsInVzYWdlIjp7ImlucHV0VG9rZW5zIjoxNzc5Nywib3V0cHV0VG9rZW5zIjoxOTM5LCJjYWNoZVJlYWRUb2tlbnMiOjQ0MTksImNhY2hlV3JpdGVUb2tlbnMiOjAsImVzdGltYXRlZFRva2VucyI6MjQxNTUsImxsbUNvc3QiOjAuMDI3OTMzODk5OTk5OTk5OTk4LCJ0b29sQ29zdCI6MCwidG90YWxDb3N0IjowLjAyNzkzMzg5OTk5OTk5OTk5OH0sInJlc29sdmVkTW9kZWwiOnsicHJvdmlkZXIiOiJvcGVucm91dGVyIiwiaWQiOiJhbnRocm9waWMvY2xhdWRlLWhhaWt1LTQuNSJ9LCJ0b3RhbER1cmF0aW9uTXMiOjI4MTg1fSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzA3NjM5MX19LHsidHlwZSI6InNlc3Npb25faW5mbyIsImlkIjoiMTYyNjM5ODgiLCJwYXJlbnRJZCI6IjJlMDc1YzQyIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MToxNy45MDNaIiwibmFtZSI6IlNjYWZmb2xkIHBpIGFwZXJ0dXJlIGV4dGVuc2lvbiJ9LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDpzZXNzaW9uLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6IlNjYWZmb2xkIHBpIGFwZXJ0dXJlIGV4dGVuc2lvbiIsInJhd1VzZXJUZXh0Ijoic2NhZmZvbGQgdGhpcyBleHRlbnNpb24uIFRoZSBleHRlbnNpb24gd2lsbCBhZGQgVGFpbHNjYWxlIEFwZXJ0dXJlIHN1cHBvcnQgdG8gUEkuIFRvIGRvIHNvLCBpdCB3aWxsIHVzZSB0aGUgY29uZmlnLnV0aWxzIHBhY2thZ2UgdG8gaGF2ZSBhIHNldHRpbmdzIHBhZ2UuIFRoYXQgc2V0dGluZ3MgcGFnZSB3aWxsIGFsbG93IHlvdSB0byBkZWZpbmUgcHJvdmlkZXJzLCBib3RoIHRvIGRlZmluZSBwcm92aWRlcnMsIGJ1dCBhbHNvIHRvIGRlZmluZSBhIGJhc2VVcmwgdG8gdXNlIGZvciB0aG9zZSBwcm92aWRlcnMuIFxuXG51c2UgdGhlIEBhbGlvdS9waS11dGlscy1zZXR0aW5ncyBmb3IgdGhlIHNldHRpbmdzLlxuXG5gYXBlcnR1cmVgIGlzIHRoZSBzZXR0aW5ncyBwcmVmaXggbmFtZS4gXG5cbmxvb2sgYXQgfi90bXAvMjAyNi0wMi0xNy1waS1hcGVydHVyZS9pbmRleC50cyBmb3IgdGhlIHBvYyBmb2N1c2VkIG9uIG9wZW5yb3V0ZXIuXG5cbml0IHNob3VsZCBhbHNvIGhhdmUgYSBgYXBlcnR1cmU6c2V0dXBgIGNvbW1hbmQgdGhhdCBpcyBhbiBpbnRlcmFjdGl2ZSB3aXphcmQ6XG4tIGFza3MgZm9yIHlvdXIgYXBlcnR1cmUgYmFzZSB1cmwuIHBsYWNlaG9sZGVyIHNob3VsZCBhaS5wYW5nby1saW4udHMubmV0XG4tIGFza3MgZm9yIHByb3ZpZGVyIHRvIHVzZSB3aXRoIGFwZXJ0dXJlLiB0aGlzIHNob3VsZCBiZSBhIHNlbGVjdCBjb21wb25lbnQgd2l0aCBmdXp6eSBzZWFyY2guIG1ha2Ugc3VyZSB0byBsb29rIGF0IHRoZSBhdmFpbGFibGUgY29tcG9uZW50cyB0byB1c2UgaXQuXG4tIHRoZW4gaXQgcmVnaXN0ZXJzIHByb3ZpZGVycyB3aXRoIHRoZSBvdmVycmlkZW50IGJhc2UgdXJsIGFuZCB0aGUgYXBpIGAtYCBcblxudGhlbiBpbiB0aGUgc2V0dGluZ3MsIGFsbG93IHVwZGF0aW5nIGJvdGggdGhlIGJhc2UgdXJsIGFuZCB0aGUgcHJvdmlkZXIgbGlzdC4gXG5cbnJlYWQgdGhlIGRvY3VtZW50YXRpb24gcGFnZTogaHR0cHM6Ly90YWlsc2NhbGUuY29tL2RvY3MvZmVhdHVyZXMvYXBlcnR1cmVcblxuYW5kIHRoZW4gbWFrZSBhIHBsYW4gZm9yIHRoZSBpbXBsZW1lbnRhdGlvbi4iLCJyYXdBc3Npc3RhbnRUZXh0IjoiXG5cbiIsImF0dGVtcHQiOjF9LCJpZCI6ImFhN2Q2ZTEyIiwicGFyZW50SWQiOiIxNjI2Mzk4OCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MTcuOTA0WiJ9LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiYzJmOTNlNWEiLCJwYXJlbnRJZCI6ImFhN2Q2ZTEyIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MToyMy45NzVaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiY2NhOTgzOGUiLCJwYXJlbnRJZCI6ImMyZjkzZTVhIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MToyMy45NzZaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMTZkNnRQSFZlQ1VmZVA5a2lpejJxV04iLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL3Zhci9mb2xkZXJzL1tSRURBQ1RFRF0vVC9waS1leHRlbnNpb25zL25wbS9mMzViMjEyOS9ub2RlX21vZHVsZXMvQGFsaW91L3BpLWV4dGVuc2lvbi1kZXYvc2tpbGxzL3BpLWV4dGVuc2lvbi9yZWZlcmVuY2VzL3N0cnVjdHVyZS5tZCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDE3dUNXeHF1RGNHdFhYWXlRblplNFNYIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii92YXIvZm9sZGVycy9bUkVEQUNURURdL1QvcGktZXh0ZW5zaW9ucy9ucG0vZjM1YjIxMjkvbm9kZV9tb2R1bGVzL0BhbGlvdS9waS1leHRlbnNpb24tZGV2L3NraWxscy9waS1leHRlbnNpb24vcmVmZXJlbmNlcy9jb21tYW5kcy5tZCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFMbmYyTG91WDVlMzFTV1A5b21NZEZwIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii92YXIvZm9sZGVycy9bUkVEQUNURURdL1QvcGktZXh0ZW5zaW9ucy9ucG0vZjM1YjIxMjkvbm9kZV9tb2R1bGVzL0BhbGlvdS9waS1leHRlbnNpb24tZGV2L3NraWxscy9waS1leHRlbnNpb24vcmVmZXJlbmNlcy9wcm92aWRlcnMubWQifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxWUVyUlpqUVdDYnllVVVvaXlhTERldCIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvdmFyL2ZvbGRlcnMvW1JFREFDVEVEXS9UL3BpLWV4dGVuc2lvbnMvbnBtL2YzNWIyMTI5L25vZGVfbW9kdWxlcy9AYWxpb3UvcGktZXh0ZW5zaW9uLWRldi9za2lsbHMvcGktZXh0ZW5zaW9uL3JlZmVyZW5jZXMvY29tcG9uZW50cy5tZCJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0Ijo0MzMsImNhY2hlUmVhZCI6OTIxMiwiY2FjaGVXcml0ZSI6NDM4NSwidG90YWxUb2tlbnMiOjE0MDMxLCJjb3N0Ijp7ImlucHV0IjowLjAwMDAwNSwib3V0cHV0IjowLjAxMDgyNTAwMDAwMDAwMDAwMSwiY2FjaGVSZWFkIjowLjAwNDYwNiwiY2FjaGVXcml0ZSI6MC4wMjc0MDYyNSwidG90YWwiOjAuMDQyODQyMjV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDcwNzYzOTN9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6ImQ1MDIzMmJmIiwicGFyZW50SWQiOiJjY2E5ODM4ZSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjMuOTgwWiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjdkYWYxZmUzIiwicGFyZW50SWQiOiJkNTAyMzJiZiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjMuOTg3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDE2ZDZ0UEhWZUNVZmVQOWtpaXoycVdOIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBFeHRlbnNpb24gU3RydWN0dXJlXG5cblRoaXMgY292ZXJzIHRoZSBzdGFuZGFsb25lIHJlcG9zaXRvcnkgc3RydWN0dXJlIGZvciBhIFBpIGV4dGVuc2lvbi4gVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgbGF5b3V0IGZvciBuZXcgZXh0ZW5zaW9ucy5cblxuIyMgRGlyZWN0b3J5IExheW91dFxuXG5gYGBcbm15LWV4dGVuc2lvbi9cbiAgc3JjL1xuICAgIGluZGV4LnRzICAgICAgICAgICAgICAjIEVudHJ5IHBvaW50IChkZWZhdWx0IGV4cG9ydClcbiAgICBjb25maWcudHMgICAgICAgICAgICAgIyBDb25maWcgc2NoZW1hICh0eXBlcykgKyBsb2FkZXIgKyBkZWZhdWx0c1xuICAgIGNsaWVudC50cyAgICAgICAgICAgICAjIEFQSSBjbGllbnQgKGlmIHdyYXBwaW5nIGEgdGhpcmQtcGFydHkgQVBJKVxuICAgIHRvb2xzL1xuICAgICAgbXktdG9vbC50cyAgICAgICAgICAjIE9uZSBmaWxlIHBlciB0b29sXG4gICAgY29tbWFuZHMvXG4gICAgICBteS1jb21tYW5kLnRzICAgICAgICAjIE9uZSBmaWxlIHBlciBjb21tYW5kXG4gICAgY29tcG9uZW50cy9cbiAgICAgIG15LXJlbmRlcmVyLnRzICAgICAgICMgU2hhcmVkIFRVSSBjb21wb25lbnRzXG4gICAgcHJvdmlkZXJzL1xuICAgICAgaW5kZXgudHMgICAgICAgICAgICAgIyBQcm92aWRlciByZWdpc3RyYXRpb25cbiAgICAgIG1vZGVscy50cyAgICAgICAgICAgICMgTW9kZWwgZGVmaW5pdGlvbnNcbiAgICB1dGlscy8gICAgICAgICAgICAgICAgICMgSW50ZXJuYWwgaGVscGVycyAobWF0Y2hpbmcsIHBhcnNpbmcsIGV0Yy4pXG4gICAgICBteS1oZWxwZXIudHNcbiAgcGFja2FnZS5qc29uXG4gIHRzY29uZmlnLmpzb25cbiAgYmlvbWUuanNvbiAgICAgICAgICAgICAgICMgTGludGluZy9mb3JtYXR0aW5nIChvcHRpb25hbClcbiAgLmNoYW5nZXNldC9cbiAgICBjb25maWcuanNvbiAgICAgICAgICAgICMgQ2hhbmdlc2V0IGNvbmZpZyBmb3IgdmVyc2lvbmluZ1xuICBSRUFETUUubWRcbmBgYFxuXG5Ob3QgZXZlcnkgZXh0ZW5zaW9uIG5lZWRzIGV2ZXJ5IGRpcmVjdG9yeS4gQSBzaW1wbGUgZXh0ZW5zaW9uIHdpdGggb25lIHRvb2wgbWlnaHQgb25seSBoYXZlIGBzcmMvaW5kZXgudHNgIGFuZCBgc3JjL3Rvb2xzL215LXRvb2wudHNgLlxuXG4jIyMgT3JnYW5pemF0aW9uIHByaW5jaXBsZXNcblxuLSAqKmBpbmRleC50c2AgYW5kIGBjb25maWcudHNgKiogc3RheSBhdCByb290LiBUaGVzZSBhcmUgdGhlIHR3byBjb3JlIGZpbGVzIGV2ZXJ5IG5vbi10cml2aWFsIGV4dGVuc2lvbiBoYXMuXG4tICoqVG9vbHMsIGNvbW1hbmRzLCBjb21wb25lbnRzLCBwcm92aWRlcnMsIGhvb2tzKiogZWFjaCBnZXQgdGhlaXIgb3duIGRpcmVjdG9yeS4gT25lIGZpbGUgcGVyIHRvb2wvY29tbWFuZC9jb21wb25lbnQuXG4tICoqQ29uZmlnIHR5cGVzIGxpdmUgaW4gYGNvbmZpZy50c2AqKiwgbm90IGEgc2VwYXJhdGUgYHR5cGVzLnRzYCBvciBgY29uZmlnLXNjaGVtYS50c2AuIFRoZSBjb25maWcgZmlsZSBleHBvcnRzIGJvdGggdGhlIHR5cGVzICh1c2VyLWZhY2luZyBzY2hlbWEsIHJlc29sdmVkIHNjaGVtYSkgYW5kIHRoZSBjb25maWcgbG9hZGVyIGluc3RhbmNlLlxuLSAqKlV0aWxpdHkvaGVscGVyIGZpbGVzKiogZ28gaW4gYHV0aWxzL2AuIFRoaXMgaW5jbHVkZXMgcGF0dGVybiBtYXRjaGluZywgc2hlbGwgcGFyc2luZywgZXZlbnQgaGVscGVycywgbWlncmF0aW9ucywgZXRjLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBhIHRvb2wsIGNvbW1hbmQsIGNvbXBvbmVudCwgcHJvdmlkZXIsIG9yIGhvb2suXG4tICoqTm8gc2VwYXJhdGUgYHR5cGVzLnRzYCoqIHVubGVzcyB0aGUgZXh0ZW5zaW9uIGhhcyBzaGFyZWQgdHlwZXMgdW5yZWxhdGVkIHRvIGNvbmZpZyAocmFyZSkuIENvbmZpZyB0eXBlcyBhcmUgdGhlIG1vc3QgY29tbW9uIHNoYXJlZCB0eXBlcywgYW5kIHRoZXkgYmVsb25nIGluIGBjb25maWcudHNgLlxuXG4jIyBwYWNrYWdlLmpzb25cblxuYGBganNvblxue1xuICBcIm5hbWVcIjogXCJAc2NvcGUvcGktbXktZXh0ZW5zaW9uXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMS4wXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgZXh0ZW5zaW9uXCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJwaVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcIi4vc3JjL2luZGV4LnRzXCJdLFxuICAgIFwic2tpbGxzXCI6IFtcIi4vc2tpbGxzXCJdLFxuICAgIFwidGhlbWVzXCI6IFtcIi4vdGhlbWVzXCJdLFxuICAgIFwicHJvbXB0c1wiOiBbXCIuL3Byb21wdHNcIl0sXG4gICAgXCJ2aWRlb1wiOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vZGVtby5tcDRcIlxuICB9LFxuICBcInBlZXJEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjogXCI+PUNVUlJFTlRfVkVSU0lPTlwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI6IFwiQ1VSUkVOVF9WRVJTSU9OXCIsXG4gICAgXCJAbWFyaW96ZWNobmVyL3BpLXR1aVwiOiBcIkNVUlJFTlRfVkVSU0lPTlwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjguMFwiXG4gIH0sXG4gIFwicG5wbVwiOiB7XG4gICAgXCJvdmVycmlkZXNcIjoge1xuICAgICAgXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI6IFwiJEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCIsXG4gICAgICBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI6IFwiJEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCJcbiAgICB9XG4gIH1cbn1cbmBgYFxuXG5SZXBsYWNlIGBDVVJSRU5UX1ZFUlNJT05gIHdpdGggdGhlIGFjdHVhbCBpbnN0YWxsZWQgdmVyc2lvbiBvZiBwaSAoZS5nLiwgYDAuNTEuMmApLlxuXG4jIyMgRmllbGRzXG5cbioqYHBpYCBrZXkqKjogRGVjbGFyZXMgZXh0ZW5zaW9uIHJlc291cmNlcy4gQWxsIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSByb290LlxuXG58IEZpZWxkIHwgRGVzY3JpcHRpb24gfFxufC0tLXwtLS18XG58IGBleHRlbnNpb25zYCB8IEFycmF5IG9mIGVudHJ5IHBvaW50IHBhdGhzLiBFYWNoIGlzIGEgVHlwZVNjcmlwdCBmaWxlIHdpdGggYSBkZWZhdWx0IGV4cG9ydCBmdW5jdGlvbi4gfFxufCBgc2tpbGxzYCB8IEFycmF5IG9mIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgc2tpbGwgZGVmaW5pdGlvbnMuIE9wdGlvbmFsLiB8XG58IGB0aGVtZXNgIHwgQXJyYXkgb2YgZGlyZWN0b3JpZXMgY29udGFpbmluZyB0aGVtZSBmaWxlcy4gT3B0aW9uYWwuIHxcbnwgYHByb21wdHNgIHwgQXJyYXkgb2YgZGlyZWN0b3JpZXMgY29udGFpbmluZyBwcm9tcHQgZmlsZXMuIE9wdGlvbmFsLiB8XG58IGB2aWRlb2AgfCBVUkwgdG8gYW4gYC5tcDRgIGRlbW8gdmlkZW8uIERpc3BsYXllZCBvbiB0aGUgcGkgd2Vic2l0ZSBwYWNrYWdlIGxpc3RpbmcuIE5vdCB1c2VkIGJ5IHBpIGl0c2VsZi4gT3B0aW9uYWwuIHxcblxuKipgcGVlckRlcGVuZGVuY2llc2AqKjogRGVjbGFyZXMgdGhlIG1pbmltdW0gcGkgdmVyc2lvbiByZXF1aXJlZC4gVXNlIGA+PWAgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIHdoZW4gY3JlYXRpbmcuIFRoZSByYW5nZSBjYW4gYmUgcmVsYXhlZCBsYXRlciB3aGVuIHZlcmlmeWluZyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuXG5cbioqYGRldkRlcGVuZGVuY2llc2AqKjogU2FtZSBwYWNrYWdlcyBhdCBleGFjdCB2ZXJzaW9ucyBmb3IgdHlwZSBjaGVja2luZyBkdXJpbmcgZGV2ZWxvcG1lbnQuXG5cbioqYHBucG0ub3ZlcnJpZGVzYCoqOiBFbnN1cmVzIHBpIHN1Yi1wYWNrYWdlcyByZXNvbHZlIHRvIHRoZSB2ZXJzaW9uIGJ1bmRsZWQgd2l0aCBwaS1jb2RpbmctYWdlbnQsIGF2b2lkaW5nIGR1cGxpY2F0ZSBpbnN0YWxsYXRpb25zLlxuXG4jIyB0c2NvbmZpZy5qc29uXG5cbmBgYGpzb25cbntcbiAgXCJjb21waWxlck9wdGlvbnNcIjoge1xuICAgIFwidGFyZ2V0XCI6IFwiRVMyMDIyXCIsXG4gICAgXCJtb2R1bGVcIjogXCJFU05leHRcIixcbiAgICBcIm1vZHVsZVJlc29sdXRpb25cIjogXCJidW5kbGVyXCIsXG4gICAgXCJlc01vZHVsZUludGVyb3BcIjogdHJ1ZSxcbiAgICBcInN0cmljdFwiOiB0cnVlLFxuICAgIFwic2tpcExpYkNoZWNrXCI6IHRydWUsXG4gICAgXCJub0VtaXRcIjogdHJ1ZSxcbiAgICBcImRlY2xhcmF0aW9uXCI6IGZhbHNlLFxuICAgIFwianN4XCI6IFwicmVhY3QtanN4XCIsXG4gICAgXCJqc3hJbXBvcnRTb3VyY2VcIjogXCJAbWFyaW96ZWNobmVyL3BpLXR1aVwiXG4gIH0sXG4gIFwiaW5jbHVkZVwiOiBbXCJzcmMvKiovKi50c1wiLCBcInNyYy8qKi8qLnRzeFwiXVxufVxuYGBgXG5cbkV4dGVuc2lvbnMgYXJlIGxvYWRlZCBkaXJlY3RseSBieSBwaSAobm8gYnVpbGQgc3RlcCkuIGBub0VtaXQ6IHRydWVgIG1lYW5zIFR5cGVTY3JpcHQgaXMgb25seSB1c2VkIGZvciB0eXBlIGNoZWNraW5nLiBUaGUgYGpzeGAgc2V0dGluZ3MgYXJlIG9ubHkgbmVlZGVkIGlmIHlvdSB1c2UgSlNYIGluIFRVSSBjb21wb25lbnRzLlxuXG4jIyBFbnRyeSBQb2ludCAoc3JjL2luZGV4LnRzKVxuXG5UaGUgZW50cnkgcG9pbnQgaXMgYSBkZWZhdWx0IGV4cG9ydCBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIHRoZSBgRXh0ZW5zaW9uQVBJYCBvYmplY3QuXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB0eXBlIHsgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwaTogRXh0ZW5zaW9uQVBJKSB7XG4gIC8vIFJlZ2lzdGVyIHRvb2xzLCBjb21tYW5kcywgcHJvdmlkZXJzLCBob29rcywgZXRjLlxufVxuYGBgXG5cbklmIHlvdSBuZWVkIHRvIGF3YWl0IHNvbWV0aGluZyBhdCBsb2FkIHRpbWUgKGUuZy4sIGNoZWNraW5nIGFuIEFQSSBzdWJzY3JpcHRpb24pLCB1c2UgYW4gYXN5bmMgZW50cnkgcG9pbnQ6XG5cbmBgYHR5cGVzY3JpcHRcbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwaTogRXh0ZW5zaW9uQVBJKSB7XG4gIGNvbnN0IGlzU3Vic2NyaWJlZCA9IGF3YWl0IGNoZWNrU3Vic2NyaXB0aW9uKCk7XG4gIGlmIChpc1N1YnNjcmliZWQpIHtcbiAgICBwaS5yZWdpc3RlclRvb2wobXlUb29sKTtcbiAgfVxufVxuYGBgXG5cblByZWZlciBzeW5jIHVubGVzcyB5b3UgZ2VudWluZWx5IG5lZWQgdG8gYXdhaXQgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cblxuIyMgQVBJIEtleSBQYXR0ZXJuXG5cbklmIHlvdXIgZXh0ZW5zaW9uIHdyYXBzIGEgdGhpcmQtcGFydHkgQVBJIHRoYXQgcmVxdWlyZXMgYW4gQVBJIGtleTpcblxuYGBgdHlwZXNjcmlwdFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBpOiBFeHRlbnNpb25BUEkpIHtcbiAgY29uc3QgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuTVlfQVBJX0tFWTtcblxuICAvLyBSZWdpc3RlciBwcm92aWRlciB1bmNvbmRpdGlvbmFsbHkgaWYgaXQgZXhpc3RzXG4gIC8vIChwcm92aWRlciBoYW5kbGVzIG1pc3Npbmcga2V5IGludGVybmFsbHkgZm9yIG1vZGVsIHJlZ2lzdHJhdGlvbilcbiAgcGkucmVnaXN0ZXJQcm92aWRlcihteVByb3ZpZGVyKTtcblxuICAvLyBPbmx5IHJlZ2lzdGVyIHRvb2xzIHRoYXQgbmVlZCB0aGUga2V5XG4gIGlmICghYXBpS2V5KSB7XG4gICAgcGkub24oXCJzZXNzaW9uX3N0YXJ0XCIsIGFzeW5jIChfZXZlbnQsIGN0eCkgPT4ge1xuICAgICAgY3R4LnVpLm5vdGlmeShcIk1ZX0FQSV9LRVkgbm90IHNldC4gVG9vbHMgZGlzYWJsZWQuXCIsIFwid2FybmluZ1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBwaS5yZWdpc3RlclRvb2woY3JlYXRlTXlUb29sKGFwaUtleSkpO1xuICBwaS5yZWdpc3RlckNvbW1hbmQoY3JlYXRlTXlDb21tYW5kKGFwaUtleSkpO1xufVxuYGBgXG5cblRoZSBwcmluY2lwbGU6IGNoZWNrIGZvciB0aGUgQVBJIGtleSBiZWZvcmUgcmVnaXN0ZXJpbmcgYW55dGhpbmcgdGhhdCByZXF1aXJlcyBpdC4gSWYgdGhlIGV4dGVuc2lvbiBhbHNvIHJlZ2lzdGVycyBhIHByb3ZpZGVyLCB0aGUgcHJvdmlkZXIgY2FuIGJlIHJlZ2lzdGVyZWQgcmVnYXJkbGVzcyAoaXQgaGFuZGxlcyBrZXkgcHJlc2VuY2UgaW50ZXJuYWxseSBmb3IgbW9kZWwgbGlzdGluZykuXG5cbiMjIEltcG9ydHNcblxuRG8gbm90IHVzZSBgLmpzYCBmaWxlIGV4dGVuc2lvbnMgaW4gaW1wb3J0cy4gVXNlIGJhcmUgbW9kdWxlIHBhdGhzOlxuXG5gYGB0eXBlc2NyaXB0XG4vLyBDb3JyZWN0XG5pbXBvcnQgeyBteVRvb2wgfSBmcm9tIFwiLi90b29scy9teS10b29sXCI7XG5pbXBvcnQgdHlwZSB7IE15VHlwZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFdyb25nXG5pbXBvcnQgeyBteVRvb2wgfSBmcm9tIFwiLi90b29scy9teS10b29sLmpzXCI7XG5gYGBcblxuIyMgTW9ub3JlcG8gVmFyaWFudFxuXG5JbiBhIG1vbm9yZXBvIHdpdGggcG5wbSB3b3Jrc3BhY2VzLCB0aGUgc3RydWN0dXJlIGRpZmZlcnMgc2xpZ2h0bHkuIFRoZXJlIGlzIG5vIGBzcmMvYCBkaXJlY3Rvcnk7IHRoZSBlbnRyeSBwb2ludCBhbmQgY29uZmlnIGxpdmUgZGlyZWN0bHkgaW4gdGhlIHBhY2thZ2Ugcm9vdC5cblxuYGBgXG5leHRlbnNpb25zL1xuICBteS1leHRlbnNpb24vXG4gICAgaW5kZXgudHMgICAgICAgICAgICAgICMgRW50cnkgcG9pbnQgKG5vIHNyYy8gZGlyZWN0b3J5KVxuICAgIGNvbmZpZy50cyAgICAgICAgICAgICAjIENvbmZpZyBzY2hlbWEgKHR5cGVzKSArIGxvYWRlciArIGRlZmF1bHRzXG4gICAgY29tbWFuZHMvXG4gICAgICBzZXR0aW5ncy1jb21tYW5kLnRzXG4gICAgaG9va3MvXG4gICAgICBteS1ob29rLnRzXG4gICAgY29tcG9uZW50cy9cbiAgICAgIG15LWVkaXRvci50c1xuICAgIHV0aWxzL1xuICAgICAgbWF0Y2hpbmcudHNcbiAgICAgIHNoZWxsLXV0aWxzLnRzXG4gICAgcGFja2FnZS5qc29uXG5gYGBcblxuS2V5IGRpZmZlcmVuY2VzIGZyb20gc3RhbmRhbG9uZTpcbi0gRW50cnkgcG9pbnQgZGlyZWN0bHkgaW4gdGhlIHBhY2thZ2Ugcm9vdCAobm8gYHNyYy9gIGRpcmVjdG9yeSkuXG4tIGBcInBpXCI6IHsgXCJleHRlbnNpb25zXCI6IFtcIi4vaW5kZXgudHNcIl0gfWAgaW5zdGVhZCBvZiBgW1wiLi9zcmMvaW5kZXgudHNcIl1gLlxuLSBVc2VzIGBwZWVyRGVwZW5kZW5jaWVzYCAocmVzb2x2ZWQgYnkgd29ya3NwYWNlIHJvb3QpLlxuLSBTaGFyZWQgYHRzY29uZmlnYCBmcm9tIGEgd29ya3NwYWNlIHBhY2thZ2UuXG4tIFNhbWUgb3JnYW5pemF0aW9uIHByaW5jaXBsZXMgYXBwbHk6IGNvbmZpZyB0eXBlcyBpbiBgY29uZmlnLnRzYCwgaGVscGVycyBpbiBgdXRpbHMvYCwgb25lIGRpcmVjdG9yeSBwZXIgZmVhdHVyZSBjYXRlZ29yeS5cblxuIyMjIFdvcmtzcGFjZSBkZXBlbmRlbmNpZXNcblxuV2hlbiBhbiBleHRlbnNpb24gZGVwZW5kcyBvbiBhbm90aGVyIHdvcmtzcGFjZSBwYWNrYWdlIChlLmcuLCBgQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzYCwgYEBhbGlvdS9waS1hZ2VudC1raXRgKSwgdXNlIHRoZSBgd29ya3NwYWNlOl5gIHByb3RvY29sIGluc3RlYWQgb2YgYSB2ZXJzaW9uIHJhbmdlOlxuXG5gYGBqc29uXG57XG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhbGlvdS9waS11dGlscy1zZXR0aW5nc1wiOiBcIndvcmtzcGFjZTpeXCIsXG4gICAgXCJAYWxpb3Uvc2hcIjogXCJeMC4xLjBcIlxuICB9XG59XG5gYGBcblxuVXNlIGB3b3Jrc3BhY2U6XmAgb25seSBmb3IgcGFja2FnZXMgdGhhdCBsaXZlIGluIHRoaXMgbW9ub3JlcG8gKHVuZGVyIGBwYWNrYWdlcy9gIG9yIGBleHRlbnNpb25zL2ApLiBFeHRlcm5hbCBwdWJsaXNoZWQgcGFja2FnZXMgbGlrZSBgQGFsaW91L3NoYCBrZWVwIHJlZ3VsYXIgdmVyc2lvbiByYW5nZXMuXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcwODM5ODB9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6IjA2N2M5MjJiIiwicGFyZW50SWQiOiI3ZGFmMWZlMyIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjMuOTkwWiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjFjZjM3YWU0IiwicGFyZW50SWQiOiIwNjdjOTIyYiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjMuOTkxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDE3dUNXeHF1RGNHdFhYWXlRblplNFNYIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBDb21tYW5kc1xuXG5Db21tYW5kcyBhcmUgdXNlci1pbnZva2VkIGFjdGlvbnMgdHJpZ2dlcmVkIHdpdGggYC9jb21tYW5kLW5hbWVgIGluIHRoZSBpbnB1dCBlZGl0b3IuXG5cbiMjIFJlZ2lzdHJhdGlvblxuXG5gYGB0eXBlc2NyaXB0XG5waS5yZWdpc3RlckNvbW1hbmQoXCJteS1jb21tYW5kXCIsIHtcbiAgZGVzY3JpcHRpb246IFwiV2hhdCB0aGlzIGNvbW1hbmQgZG9lc1wiLFxuICBoYW5kbGVyOiBhc3luYyAoYXJncywgY3R4KSA9PiB7XG4gICAgLy8gYXJnczogc3RyaW5nIChldmVyeXRoaW5nIGFmdGVyIHRoZSBjb21tYW5kIG5hbWUpXG4gICAgLy8gY3R4OiBFeHRlbnNpb25Db250ZXh0XG4gIH0sXG59KTtcbmBgYFxuXG4jIyBDb21tYW5kIENvbnRleHRcblxuVGhlIGBjdHhgIHBhcmFtZXRlciBwcm92aWRlcyB0aGUgc2FtZSBgRXh0ZW5zaW9uQ29udGV4dGAgYXMgaG9va3MsIHdpdGggYWNjZXNzIHRvIGBjdHgudWlgLCBgY3R4Lmhhc1VJYCwgYGN0eC5jd2RgLCBldGMuXG5cbkNvbW1hbmRzIGFyZSBpbnRlcmFjdGl2ZSBieSBuYXR1cmUgKHRoZSB1c2VyIHR5cGVkIHRoZW0pLCBzbyBgY3R4Lmhhc1VJYCBpcyBhbG1vc3QgYWx3YXlzIGB0cnVlYC4gSG93ZXZlciwgY29tbWFuZHMgY2FuIGFsc28gYmUgaW52b2tlZCBwcm9ncmFtbWF0aWNhbGx5IChlLmcuLCB2aWEgUlBDKSwgc28gdGhlIHRocmVlLXRpZXIgcGF0dGVybiBzdGlsbCBhcHBsaWVzLlxuXG4jIyBTaW1wbGUgQ29tbWFuZFxuXG5gYGB0eXBlc2NyaXB0XG5waS5yZWdpc3RlckNvbW1hbmQoXCJiYWxhbmNlXCIsIHtcbiAgZGVzY3JpcHRpb246IFwiQ2hlY2sgQVBJIGJhbGFuY2VcIixcbiAgaGFuZGxlcjogYXN5bmMgKF9hcmdzLCBjdHgpID0+IHtcbiAgICBjb25zdCBiYWxhbmNlID0gYXdhaXQgZmV0Y2hCYWxhbmNlKCk7XG4gICAgY3R4LnVpLm5vdGlmeShgQmFsYW5jZTogJCR7YmFsYW5jZS50b0ZpeGVkKDIpfWAsIFwiaW5mb1wiKTtcbiAgfSxcbn0pO1xuYGBgXG5cbiMjIENvbW1hbmQgd2l0aCBSaWNoIERpc3BsYXlcblxuV2hlbiBhIGNvbW1hbmQgbmVlZHMgYSByaWNoIFRVSSBkaXNwbGF5LCB1c2UgdGhlIHRocmVlLXRpZXIgcGF0dGVybiBmcm9tIGByZWZlcmVuY2VzL21vZGVzLm1kYDpcblxuYGBgdHlwZXNjcmlwdFxucGkucmVnaXN0ZXJDb21tYW5kKFwicXVvdGFzXCIsIHtcbiAgZGVzY3JpcHRpb246IFwiU2hvdyBBUEkgcXVvdGFzXCIsXG4gIGhhbmRsZXI6IGFzeW5jIChfYXJncywgY3R4KSA9PiB7XG4gICAgY29uc3QgcXVvdGFzID0gYXdhaXQgZmV0Y2hRdW90YXMoKTtcblxuICAgIC8vIFByaW50IG1vZGVcbiAgICBpZiAoIWN0eC5oYXNVSSkge1xuICAgICAgY29uc29sZS5sb2coZm9ybWF0UXVvdGFzUGxhaW4ocXVvdGFzKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW50ZXJhY3RpdmUgbW9kZTogZnVsbCBUVUkgY29tcG9uZW50XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3R4LnVpLmN1c3RvbTx2b2lkPigodHVpLCB0aGVtZSwgX2tiLCBkb25lKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFF1b3Rhc0Rpc3BsYXkodGhlbWUsIHF1b3RhcywgKCkgPT4gZG9uZSh1bmRlZmluZWQpKTtcbiAgICB9KTtcblxuICAgIC8vIFJQQyBtb2RlOiBjdXN0b20oKSByZXR1cm5lZCB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBkaWFsb2cgbWV0aG9kc1xuICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LnVpLm5vdGlmeShmb3JtYXRRdW90YXNQbGFpbihxdW90YXMpLCBcImluZm9cIik7XG4gICAgfVxuICB9LFxufSk7XG5gYGBcblxuIyMgRXh0cmFjdGluZyBDb21wb25lbnRzXG5cbktlZXAgY29tbWFuZCBoYW5kbGVycyB0aGluLiBFeHRyYWN0IHRoZSBUVUkgY29tcG9uZW50IGludG8gYSBzZXBhcmF0ZSBmaWxlOlxuXG5gYGBcbnNyYy9cbiAgY29tbWFuZHMvXG4gICAgcXVvdGFzLnRzICAgICAgICAgICAgICAjIEhhbmRsZXIgKyBmb3JtYXRRdW90YXNQbGFpblxuICBjb21wb25lbnRzL1xuICAgIHF1b3Rhcy1kaXNwbGF5LnRzICAgICAgIyBRdW90YXNEaXNwbGF5IGNvbXBvbmVudCBjbGFzc1xuYGBgXG5cblRoZSBjb21wb25lbnQgZmlsZSBzaG91bGQgZXhwb3J0IHRoZSBjb21wb25lbnQgY2xhc3MuIFRoZSBjb21tYW5kIGZpbGUgaW1wb3J0cyBpdCBhbmQgd2lyZXMgdXAgdGhlIGhhbmRsZXIuXG5cbiMjIEFyZ3VtZW50c1xuXG5UaGUgYGFyZ3NgIHBhcmFtZXRlciBpcyB0aGUgcmF3IHN0cmluZyBhZnRlciB0aGUgY29tbWFuZCBuYW1lLiBQYXJzZSBpdCB5b3Vyc2VsZjpcblxuYGBgdHlwZXNjcmlwdFxuaGFuZGxlcjogYXN5bmMgKGFyZ3MsIGN0eCkgPT4ge1xuICBjb25zdCBwYXJ0cyA9IGFyZ3MudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHN1YmNvbW1hbmQgPSBwYXJ0c1swXTtcbiAgLy8gLi4uXG59LFxuYGBgXG5cbiMjIENvbW1hbmQgdnMgVG9vbFxuXG58IEFzcGVjdCB8IENvbW1hbmQgfCBUb29sIHxcbnwtLS18LS0tfC0tLXxcbnwgSW52b2tlZCBieSB8IFVzZXIgKHR5cGluZyBgL25hbWVgKSB8IExMTSAoZHVyaW5nIGEgdHVybikgfFxufCBQdXJwb3NlIHwgVXNlci1mYWNpbmcgYWN0aW9ucywgc2V0dGluZ3MsIGRpc3BsYXlzIHwgTExNIGNhcGFiaWxpdGllcyB8XG58IFVJIGFjY2VzcyB8IEZ1bGwgKHVzZXIgaXMgcHJlc2VudCkgfCBMaW1pdGVkIChMTE0gaXMgZHJpdmluZykgfFxufCBSZXR1cm4gdmFsdWUgfCB2b2lkIHwgYEFnZW50VG9vbFJlc3VsdGAgKG91dHB1dCBmb3IgTExNKSB8XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcwODM5OTB9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6IjFhMGFkNWQ4IiwicGFyZW50SWQiOiIxY2YzN2FlNCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjMuOTk0WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjBlMjU2OWI4IiwicGFyZW50SWQiOiIxYTBhZDVkOCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjMuOTk2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFMbmYyTG91WDVlMzFTV1A5b21NZEZwIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBQcm92aWRlcnNcblxuUHJvdmlkZXJzIGFkZCBMTE0gYmFja2VuZHMgdG8gcGkuIFRoZXkgY29ubmVjdCBwaSB0byBtb2RlbCBBUElzIChPcGVuQUktY29tcGF0aWJsZSBvciBjdXN0b20pLlxuXG4jIyBSZWdpc3RyYXRpb25cblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgVHlwZSwgdHlwZSBFeHRlbnNpb25BUEksIHR5cGUgUHJvdmlkZXJEZWZpbml0aW9uIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI7XG5cbmNvbnN0IG15UHJvdmlkZXI6IFByb3ZpZGVyRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogXCJteS1wcm92aWRlclwiLFxuICBtb2RlbHM6ICgpID0+IHtcbiAgICBjb25zdCBhcGlLZXkgPSBwcm9jZXNzLmVudi5NWV9BUElfS0VZO1xuICAgIGlmICghYXBpS2V5KSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogXCJteS1wcm92aWRlci9tb2RlbC1uYW1lXCIsXG4gICAgICAgIG5hbWU6IFwiTW9kZWwgTmFtZVwiLFxuICAgICAgICBwcm92aWRlcjogXCJteS1wcm92aWRlclwiLFxuICAgICAgICBjYW5TdHJlYW06IHRydWUsXG4gICAgICAgIGNvbnRleHRMZW5ndGg6IDEyODAwMCxcbiAgICAgICAgbWF4T3V0cHV0VG9rZW5zOiA4MTkyLFxuICAgICAgICBwcmljaW5nOiB7IGlucHV0UGVyTWlsbGlvbjogMy4wLCBvdXRwdXRQZXJNaWxsaW9uOiAxNS4wIH0sXG4gICAgICAgIGNvbXBhdDoge1xuICAgICAgICAgIHR5cGU6IFwib3BlbmFpLWNvbXBsZXRpb25zXCIsXG4gICAgICAgICAgbWF4VG9rZW5zRmllbGQ6IFwibWF4X3Rva2Vuc1wiLFxuICAgICAgICAgIHN1cHBvcnRzRGV2ZWxvcGVyUm9sZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH0sXG4gIGFwaUtleTogKCkgPT4gcHJvY2Vzcy5lbnYuTVlfQVBJX0tFWSxcbiAgYmFzZVVybDogKCkgPT4gXCJodHRwczovL2FwaS5teS1wcm92aWRlci5jb20vdjFcIixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwaTogRXh0ZW5zaW9uQVBJKSB7XG4gIHBpLnJlZ2lzdGVyUHJvdmlkZXIobXlQcm92aWRlcik7XG59XG5gYGBcblxuIyMgUHJvdmlkZXIgRGVmaW5pdGlvblxuXG58IEZpZWxkIHwgVHlwZSB8IERlc2NyaXB0aW9uIHxcbnwtLS18LS0tfC0tLXxcbnwgYG5hbWVgIHwgYHN0cmluZ2AgfCBVbmlxdWUgcHJvdmlkZXIgaWRlbnRpZmllci4gVXNlZCBhcyBwcmVmaXggaW4gbW9kZWwgSURzLiB8XG58IGBtb2RlbHNgIHwgYCgpID0+IFByb3ZpZGVyTW9kZWxDb25maWdbXWAgfCBSZXR1cm5zIGF2YWlsYWJsZSBtb2RlbHMuIENhbGxlZCB3aGVuIHBpIG5lZWRzIHRoZSBtb2RlbCBsaXN0LiBSZXR1cm4gYFtdYCBpZiB0aGUgQVBJIGtleSBpcyBtaXNzaW5nLiB8XG58IGBhcGlLZXlgIHwgYCgpID0+IHN0cmluZyBcXHwgdW5kZWZpbmVkYCB8IFJldHVybnMgdGhlIEFQSSBrZXkuIFBpIGNhbGxzIHRoaXMgd2hlbiBtYWtpbmcgcmVxdWVzdHMuIHxcbnwgYGJhc2VVcmxgIHwgYCgpID0+IHN0cmluZyBcXHwgdW5kZWZpbmVkYCB8IFJldHVybnMgdGhlIGJhc2UgVVJMIGZvciB0aGUgQVBJLiB8XG5cblRoZSBgbW9kZWxzYCBmdW5jdGlvbiBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gY2hlY2sgZm9yIEFQSSBrZXkgcHJlc2VuY2UuIElmIHRoZSBrZXkgaXMgbWlzc2luZywgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGFuZCB0aGUgcHJvdmlkZXIgd2lsbCBhcHBlYXIgcmVnaXN0ZXJlZCBidXQgb2ZmZXIgbm8gbW9kZWxzLlxuXG4jIyBNb2RlbCBEZWZpbml0aW9uXG5cbnwgRmllbGQgfCBUeXBlIHwgRGVzY3JpcHRpb24gfFxufC0tLXwtLS18LS0tfFxufCBgaWRgIHwgYHN0cmluZ2AgfCBVbmlxdWUgbW9kZWwgSUQuIENvbnZlbnRpb246IGBwcm92aWRlci9tb2RlbC1uYW1lYC4gfFxufCBgbmFtZWAgfCBgc3RyaW5nYCB8IERpc3BsYXkgbmFtZSBzaG93biBpbiBtb2RlbCBwaWNrZXIuIHxcbnwgYHByb3ZpZGVyYCB8IGBzdHJpbmdgIHwgTXVzdCBtYXRjaCB0aGUgcHJvdmlkZXIncyBgbmFtZWAuIHxcbnwgYGNhblN0cmVhbWAgfCBgYm9vbGVhbmAgfCBXaGV0aGVyIHRoZSBtb2RlbCBzdXBwb3J0cyBzdHJlYW1pbmcgcmVzcG9uc2VzLiB8XG58IGBjb250ZXh0TGVuZ3RoYCB8IGBudW1iZXJgIHwgTWF4aW11bSBjb250ZXh0IHdpbmRvdyBpbiB0b2tlbnMuIHxcbnwgYG1heE91dHB1dFRva2Vuc2AgfCBgbnVtYmVyYCB8IE1heGltdW0gb3V0cHV0IHRva2VucyBwZXIgcmVzcG9uc2UuIHxcbnwgYHByaWNpbmdgIHwgYG9iamVjdGAgfCBgeyBpbnB1dFBlck1pbGxpb24sIG91dHB1dFBlck1pbGxpb24gfWAgaW4gVVNELiBVc2VkIGZvciBjb3N0IGRpc3BsYXkuIHxcbnwgYGNvbXBhdGAgfCBgb2JqZWN0YCB8IE9wZW5BSSBjb21wYXRpYmlsaXR5IHNldHRpbmdzLiBTZWUgYmVsb3cuIHxcblxuIyMgQ29tcGF0IEZpZWxkXG5cblRoZSBgY29tcGF0YCBmaWVsZCB0ZWxscyBwaSBob3cgdG8gdGFsayB0byB0aGUgbW9kZWwncyBBUEkuIE1vc3QgdGhpcmQtcGFydHkgQVBJcyBhcmUgT3BlbkFJLWNvbXBhdGlibGUgYnV0IGRpZmZlciBpbiB3aGljaCBmZWF0dXJlcyB0aGV5IHN1cHBvcnQuXG5cbmBgYHR5cGVzY3JpcHRcbmNvbXBhdDoge1xuICB0eXBlOiBcIm9wZW5haS1jb21wbGV0aW9uc1wiLFxuXG4gIC8vIFdoaWNoIGZpZWxkIG5hbWUgdGhlIEFQSSB1c2VzIGZvciBtYXggb3V0cHV0IHRva2Vuc1xuICBtYXhUb2tlbnNGaWVsZDogXCJtYXhfdG9rZW5zXCIgfCBcIm1heF9jb21wbGV0aW9uX3Rva2Vuc1wiLFxuXG4gIC8vIFdoZXRoZXIgdGhlIEFQSSBzdXBwb3J0cyB0aGUgJ2RldmVsb3Blcicgcm9sZSAodnMgJ3N5c3RlbScpXG4gIHN1cHBvcnRzRGV2ZWxvcGVyUm9sZTogYm9vbGVhbixcblxuICAvLyBXaGV0aGVyIHRoZSBBUEkgc3VwcG9ydHMgdGhlICdzdG9yZScgcGFyYW1ldGVyXG4gIHN1cHBvcnRzU3RvcmU6IGJvb2xlYW4sXG5cbiAgLy8gV2hldGhlciB0aGUgQVBJIHN1cHBvcnRzIHJlYXNvbmluZ19lZmZvcnQgcGFyYW1ldGVyXG4gIHN1cHBvcnRzUmVhc29uaW5nRWZmb3J0OiBib29sZWFuLFxuXG4gIC8vIFdoZXRoZXIgdXNhZ2Ugc3RhdHMgYXJlIGluY2x1ZGVkIGluIHN0cmVhbWluZyByZXNwb25zZXNcbiAgc3VwcG9ydHNVc2FnZUluU3RyZWFtaW5nOiBib29sZWFuLFxuXG4gIC8vIFdoZXRoZXIgdG9vbCByZXN1bHRzIG11c3QgaW5jbHVkZSBhICduYW1lJyBmaWVsZFxuICByZXF1aXJlc1Rvb2xSZXN1bHROYW1lOiBib29sZWFuLFxuXG4gIC8vIFdoZXRoZXIgYW4gYXNzaXN0YW50IG1lc3NhZ2UgaXMgcmVxdWlyZWQgYWZ0ZXIgdG9vbCByZXN1bHRzXG4gIHJlcXVpcmVzQXNzaXN0YW50QWZ0ZXJUb29sUmVzdWx0OiBib29sZWFuLFxuXG4gIC8vIFdoZXRoZXIgdGhpbmtpbmcvcmVhc29uaW5nIG11c3QgYmUgc2VudCBhcyB0ZXh0IGNvbnRlbnRcbiAgcmVxdWlyZXNUaGlua2luZ0FzVGV4dDogYm9vbGVhbixcblxuICAvLyBNaXN0cmFsLXNwZWNpZmljIHRvb2wgSUQgcmVxdWlyZW1lbnRzXG4gIHJlcXVpcmVzTWlzdHJhbFRvb2xJZHM6IGJvb2xlYW4sXG5cbiAgLy8gRm9ybWF0IGZvciB0aGlua2luZy9yZWFzb25pbmcgYmxvY2tzXG4gIHRoaW5raW5nRm9ybWF0OiBcIm9wZW5haVwiIHwgXCJ6YWlcIiB8IFwicXdlblwiLFxuXG4gIC8vIE9wZW5Sb3V0ZXItc3BlY2lmaWMgcm91dGluZyBoaW50c1xuICBvcGVuUm91dGVyUm91dGluZzogb2JqZWN0LFxuXG4gIC8vIFZlcmNlbCBBSSBHYXRld2F5IHJvdXRpbmdcbiAgdmVyY2VsR2F0ZXdheVJvdXRpbmc6IG9iamVjdCxcbn1cbmBgYFxuXG5BbGwgZmllbGRzIGluIGBjb21wYXRgIGFyZSBvcHRpb25hbCBleGNlcHQgYHR5cGVgLiBTdGFydCB3aXRoIHRoZSBtaW5pbXVtIGFuZCBhZGQgZmllbGRzIGFzIG5lZWRlZCBiYXNlZCBvbiBBUEkgYmVoYXZpb3IuXG5cblRoZXJlIGlzIGFsc28gYHR5cGU6IFwib3BlbmFpLXJlc3BvbnNlc1wiYCBmb3IgcHJvdmlkZXJzIHVzaW5nIHRoZSBPcGVuQUkgUmVzcG9uc2VzIEFQSSwgd2hpY2ggY3VycmVudGx5IGhhcyBubyBhZGRpdGlvbmFsIGNvbXBhdCBmaWVsZHMuXG5cbiMjIFByb3ZpZGVyIHdpdGggQVBJIEtleSBHYXRlXG5cblJlZ2lzdGVyIHRoZSBwcm92aWRlciB1bmNvbmRpdGlvbmFsbHkgYnV0IGdhdGUgdG9vbHMvY29tbWFuZHMgb24gdGhlIEFQSSBrZXk6XG5cbmBgYHR5cGVzY3JpcHRcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwaTogRXh0ZW5zaW9uQVBJKSB7XG4gIC8vIFByb3ZpZGVyIGFsd2F5cyByZWdpc3RlcmVkIC0tIG1vZGVscygpIHJldHVybnMgW10gaWYgbm8ga2V5XG4gIHBpLnJlZ2lzdGVyUHJvdmlkZXIobXlQcm92aWRlcik7XG5cbiAgY29uc3QgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuTVlfQVBJX0tFWTtcbiAgaWYgKCFhcGlLZXkpIHJldHVybjtcblxuICAvLyBPbmx5IHJlZ2lzdGVyIHRvb2xzIHRoYXQgbmVlZCB0aGUga2V5XG4gIHBpLnJlZ2lzdGVyVG9vbChjcmVhdGVTZWFyY2hUb29sKGFwaUtleSkpO1xuICBwaS5yZWdpc3RlckNvbW1hbmQoY3JlYXRlUXVvdGFzQ29tbWFuZChhcGlLZXkpKTtcbn1cbmBgYFxuXG5UaGlzIHdheSB0aGUgcHJvdmlkZXIgYXBwZWFycyBpbiBwaSdzIHByb3ZpZGVyIGxpc3QgZXZlbiB3aXRob3V0IGEga2V5LCBhbmQgdXNlcnMgc2VlIGEgY2xlYXIgXCJubyBtb2RlbHMgYXZhaWxhYmxlXCIgc3RhdGUgcmF0aGVyIHRoYW4gYSBtaXNzaW5nIHByb3ZpZGVyLlxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MDgzOTk0fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiN2Y5NmFkOWMiLCJwYXJlbnRJZCI6IjBlMjU2OWI4IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MToyNC4wMDBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVlFclJaalFXQ2J5ZVVVb2l5YUxEZXQiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIENvbXBvbmVudHNcblxuVFVJIGNvbXBvbmVudHMgcmVuZGVyIGN1c3RvbSBVSSBpbiB0aGUgdGVybWluYWwuIFRoZXkgYXJlIHVzZWQgaW4gYGN0eC51aS5jdXN0b20oKWAsIGByZW5kZXJSZXN1bHRgLCBhbmQgb3RoZXIgZGlzcGxheSBjb250ZXh0cy5cblxuIyMgQ29tcG9uZW50IEludGVyZmFjZVxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgVGhlbWUgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS10dWlcIjtcblxuY2xhc3MgTXlDb21wb25lbnQgaW1wbGVtZW50cyBDb21wb25lbnQge1xuICByZW5kZXIobWF4V2lkdGg6IG51bWJlciwgbWF4SGVpZ2h0OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIkhlbGxvIGZyb20gbXkgY29tcG9uZW50XCI7XG4gIH1cblxuICAvLyBPcHRpb25hbDogaGFuZGxlIGtleWJvYXJkIGlucHV0XG4gIGhhbmRsZUlucHV0PyhrZXk6IHN0cmluZyk6IHZvaWQ7XG59XG5gYGBcblxuYHJlbmRlcmAgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBUVUkgbmVlZHMgdG8gcmVwYWludC4gUmV0dXJuIGEgc3RyaW5nIChjYW4gaW5jbHVkZSBBTlNJIGNvZGVzIHZpYSB0aGVtZSBoZWxwZXJzKS4gYG1heFdpZHRoYCBhbmQgYG1heEhlaWdodGAgYXJlIHRoZSBhdmFpbGFibGUgdGVybWluYWwgZGltZW5zaW9ucy5cblxuIyMgQXZhaWxhYmxlIENvbXBvbmVudHMgZnJvbSBwaS10dWlcblxuQmVmb3JlIGNyZWF0aW5nIGN1c3RvbSBjb21wb25lbnRzLCBjaGVjayBpZiBhbiBleGlzdGluZyBvbmUgZml0cyB5b3VyIG5lZWQ6XG5cbnwgQ29tcG9uZW50IHwgRGVzY3JpcHRpb24gfFxufC0tLXwtLS18XG58IGBUZXh0YCB8IFN0eWxlZCB0ZXh0IHdpdGggd3JhcHBpbmcgfFxufCBgQm94YCB8IENvbnRhaW5lciB3aXRoIGJvcmRlcnMgYW5kIHBhZGRpbmcgfFxufCBgQ29udGFpbmVyYCB8IFZlcnRpY2FsL2hvcml6b250YWwgbGF5b3V0IHxcbnwgYFNwYWNlcmAgfCBFbXB0eSBzcGFjZSB8XG58IGBJbnB1dGAgfCBUZXh0IGlucHV0IGZpZWxkIHxcbnwgYEVkaXRvcmAgfCBNdWx0aS1saW5lIHRleHQgZWRpdG9yIHxcbnwgYFNlbGVjdExpc3RgIHwgU2Nyb2xsYWJsZSBzZWxlY3Rpb24gbGlzdCB8XG58IGBTZXR0aW5nc0xpc3RgIHwgS2V5LXZhbHVlIHNldHRpbmdzIGRpc3BsYXkgfFxufCBgTG9hZGVyYCB8IExvYWRpbmcgc3Bpbm5lciB8XG58IGBDYW5jZWxsYWJsZUxvYWRlcmAgfCBMb2FkZXIgd2l0aCBjYW5jZWwgc3VwcG9ydCB8XG58IGBNYXJrZG93bmAgfCBNYXJrZG93biByZW5kZXJpbmcgfFxufCBgSW1hZ2VgIHwgSW1hZ2UgcmVuZGVyaW5nIChraXR0eS9zaXhlbCBwcm90b2NvbCkgfFxufCBgVHJ1bmNhdGVkVGV4dGAgfCBUZXh0IHdpdGggbGluZSBsaW1pdCBhbmQgZXhwYW5kL2NvbGxhcHNlIHxcblxuSW1wb3J0IGZyb20gYEBtYXJpb3plY2huZXIvcGktdHVpYDpcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgVGV4dCwgQm94LCBDb250YWluZXIsIFNlbGVjdExpc3QgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS10dWlcIjtcbmBgYFxuXG4jIyBVdGlsaXR5IENvbXBvbmVudHMgZnJvbSBwaS1jb2RpbmctYWdlbnRcblxuVGhlc2UgYXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIGZvciBjb21tb24gZXh0ZW5zaW9uIHBhdHRlcm5zOlxuXG58IENvbXBvbmVudCB8IERlc2NyaXB0aW9uIHxcbnwtLS18LS0tfFxufCBgRHluYW1pY0JvcmRlcmAgfCBCb3JkZXIgdGhhdCBhZGp1c3RzIHRvIGNvbnRlbnQgd2lkdGggfFxufCBgQm9yZGVyZWRMb2FkZXJgIHwgTG9hZGVyIGluc2lkZSBhIGJvcmRlcmVkIGJveCB3aXRoIG9wdGlvbmFsIGNhbmNlbCB8XG58IGBUb29sRXhlY3V0aW9uQ29tcG9uZW50YCB8IFN0YW5kYXJkIHRvb2wgZXhlY3V0aW9uIGRpc3BsYXkgfFxuXG5JbXBvcnQgZnJvbSBgQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRgOlxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBEeW5hbWljQm9yZGVyLCBCb3JkZXJlZExvYWRlciB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiO1xuYGBgXG5cbiMjIFVzaW5nIGN0eC51aS5jdXN0b20oKVxuXG5gY3VzdG9tKClgIGRpc3BsYXlzIGEgZnVsbC1zY3JlZW4gY29tcG9uZW50IGFuZCByZXR1cm5zIHdoZW4gdGhlIGNvbXBvbmVudCBjYWxscyBgZG9uZSgpYC5cblxuYGBgdHlwZXNjcmlwdFxuY29uc3QgcmVzdWx0ID0gYXdhaXQgY3R4LnVpLmN1c3RvbTxzdHJpbmc+KCh0dWksIHRoZW1lLCBrYiwgZG9uZSkgPT4ge1xuICByZXR1cm4gbmV3IE15UGlja2VyQ29tcG9uZW50KHRoZW1lLCBpdGVtcywgKHNlbGVjdGVkKSA9PiBkb25lKHNlbGVjdGVkKSk7XG59KTtcbmBgYFxuXG5QYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZmFjdG9yeTpcbi0gYHR1aWA6IFRoZSBUVUkgaW5zdGFuY2UgKHJhcmVseSBuZWVkZWQgZGlyZWN0bHkpLlxuLSBgdGhlbWVgOiBDdXJyZW50IHRoZW1lIGZvciBzdHlsaW5nLlxuLSBga2JgOiBLZXliaW5kaW5nIGNvbmZpZ3VyYXRpb24uXG4tIGBkb25lKHZhbHVlKWA6IENhbGwgdG8gY2xvc2UgdGhlIGNvbXBvbmVudCBhbmQgcmV0dXJuIHRoZSB2YWx1ZS5cblxuVGhlIGdlbmVyaWMgdHlwZSAoYDxzdHJpbmc+YCBhYm92ZSkgaXMgdGhlIHR5cGUgb2YgdmFsdWUgcGFzc2VkIHRvIGBkb25lKClgLlxuXG5SZW1lbWJlcjogYGN1c3RvbSgpYCByZXR1cm5zIGB1bmRlZmluZWRgIGluIFJQQyBhbmQgUHJpbnQgbW9kZXMuIEFsd2F5cyBoYW5kbGUgdGhpcyBjYXNlLiBTZWUgYHJlZmVyZW5jZXMvbW9kZXMubWRgIGZvciB0aGUgdGhyZWUtdGllciBwYXR0ZXJuLlxuXG4jIyBUaGVtZSBTdHlsaW5nXG5cbkFsbCByZW5kZXIgZnVuY3Rpb25zIHJlY2VpdmUgYSBgdGhlbWVgIG9iamVjdCBmb3IgY29uc2lzdGVudCBzdHlsaW5nOlxuXG5gYGB0eXBlc2NyaXB0XG4vLyBGb3JlZ3JvdW5kIGNvbG9yc1xudGhlbWUuZmcoXCJ0b29sVGl0bGVcIiwgdGV4dCkgICAgLy8gVG9vbCBuYW1lc1xudGhlbWUuZmcoXCJhY2NlbnRcIiwgdGV4dCkgICAgICAgLy8gSGlnaGxpZ2h0c1xudGhlbWUuZmcoXCJzdWNjZXNzXCIsIHRleHQpICAgICAgLy8gR3JlZW5cbnRoZW1lLmZnKFwiZXJyb3JcIiwgdGV4dCkgICAgICAgIC8vIFJlZFxudGhlbWUuZmcoXCJ3YXJuaW5nXCIsIHRleHQpICAgICAgLy8gWWVsbG93XG50aGVtZS5mZyhcIm11dGVkXCIsIHRleHQpICAgICAgICAvLyBTZWNvbmRhcnkgdGV4dFxudGhlbWUuZmcoXCJkaW1cIiwgdGV4dCkgICAgICAgICAgLy8gVGVydGlhcnkgdGV4dFxuXG4vLyBUZXh0IHN0eWxlc1xudGhlbWUuYm9sZCh0ZXh0KVxudGhlbWUuaXRhbGljKHRleHQpXG50aGVtZS5zdHJpa2V0aHJvdWdoKHRleHQpXG5gYGBcblxuIyMgQ29tcG9uZW50IGZvciByZW5kZXJSZXN1bHRcblxuQ29tcG9uZW50cyB1c2VkIGluIGByZW5kZXJSZXN1bHRgIGFyZSBzaW1wbGVyIC0tIHRoZXkganVzdCByZXR1cm4gc3R5bGVkIHN0cmluZ3MsIG5vdCBmdWxsIGludGVyYWN0aXZlIGNvbXBvbmVudHM6XG5cbmBgYHR5cGVzY3JpcHRcbnJlbmRlclJlc3VsdChyZXN1bHQsIHsgZXhwYW5kZWQsIGlzUGFydGlhbCB9LCB0aGVtZSkge1xuICBpZiAoaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIHRoZW1lLmZnKFwibXV0ZWRcIiwgXCJMb2FkaW5nLi4uXCIpO1xuICB9XG5cbiAgY29uc3QgeyBpdGVtcyB9ID0gcmVzdWx0LmRldGFpbHM7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIHRoZW1lLmZnKFwic3VjY2Vzc1wiLCBgRm91bmQgJHtpdGVtcy5sZW5ndGh9IHJlc3VsdHNgKSxcbiAgICBcIlwiLFxuICAgIC4uLml0ZW1zLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBgICAke3RoZW1lLmZnKFwiYWNjZW50XCIsIGl0ZW0pfWApLFxuICBdO1xuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn0sXG5gYGBcblxuVGhpcyBpcyBhIHJlbmRlciBmdW5jdGlvbiwgbm90IGEgQ29tcG9uZW50IGNsYXNzLiBJdCByZXR1cm5zIGEgc3RyaW5nIGRpcmVjdGx5LlxuXG4jIyBLZXlib2FyZCBIYW5kbGluZyBpbiBjdXN0b20oKVxuXG5JbnRlcmFjdGl2ZSBjb21wb25lbnRzIGhhbmRsZSBrZXlib2FyZCBpbnB1dCB0aHJvdWdoIGBoYW5kbGVJbnB1dGA6XG5cbmBgYHR5cGVzY3JpcHRcbmNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb25lOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihkb25lOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZCkge1xuICAgIHRoaXMuZG9uZSA9IGRvbmU7XG4gIH1cblxuICBoYW5kbGVJbnB1dChrZXk6IHN0cmluZykge1xuICAgIGlmIChrZXkgPT09IFwiZXNjYXBlXCIgfHwga2V5ID09PSBcInFcIikge1xuICAgICAgdGhpcy5kb25lKHVuZGVmaW5lZCk7IC8vIENhbmNlbFxuICAgIH1cbiAgICBpZiAoa2V5ID09PSBcInJldHVyblwiKSB7XG4gICAgICB0aGlzLmRvbmUoXCJzZWxlY3RlZFwiKTsgLy8gQ29uZmlybVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcihtYXhXaWR0aDogbnVtYmVyLCBtYXhIZWlnaHQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiUHJlc3MgRW50ZXIgdG8gY29uZmlybSwgRXNjIHRvIGNhbmNlbFwiO1xuICB9XG59XG5gYGBcblxuIyMgQ29kZSBIaWdobGlnaHRpbmdcblxuRm9yIGRpc3BsYXlpbmcgY29kZSBpbiByZW5kZXJlcnM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGhpZ2hsaWdodENvZGUsIGdldExhbmd1YWdlRnJvbVBhdGggfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcblxuY29uc3QgbGFuZyA9IGdldExhbmd1YWdlRnJvbVBhdGgoXCIvcGF0aC90by9maWxlLnRzXCIpOyAvLyBcInR5cGVzY3JpcHRcIlxuY29uc3QgaGlnaGxpZ2h0ZWQgPSBoaWdobGlnaHRDb2RlKGNvZGUsIGxhbmcsIHRoZW1lKTtcbmBgYFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MDgzOTk4fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoYmFzaCkifSwiaWQiOiI2ZTE0NTRhYSIsInBhcmVudElkIjoiN2Y5NmFkOWMiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUxOjI5LjA3NFoifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIzMGRiNTUzNyIsInBhcmVudElkIjoiNmUxNDU0YWEiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUxOjI5LjA3NFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6Ik5vdyBsZXQgbWUgbG9vayBhdCB0aGUgc2V0dGluZ3MgcGFja2FnZSBhbmQgdGhlIGV4aXN0aW5nIGV4dGVuc2lvbnMgZm9yIHBhdHRlcm5zLiIsInRoaW5raW5nU2lnbmF0dXJlIjoiRXZrQkNrWUlDeGdDS2tEc2N3UmhiSXFTQlluUE4yeW80NEZEMnVHRGdPanFENnlZQXliYmxiZ0JpaEI3aTRCOEhRazhOWUVURzZhTVhhOGZiQ3Q5T2V3OVN0dkdpN1hVQnozcUVneFNsVGlPd3pxS1J1NTl3R1lhREdkOURmUXNDU2lyWEIvZ0dTSXdhb3M5ZHN3RDZqcnN5OEdzYjFMTVpubVpRRGJsSnc3MThJVWpOaFFtMEpxWE0zYS9OMTV2b09ZRVdhRGt0VE9FS21HejB2OHgrT0ZoNTFYaGVHWmRjelViRnFMQ296dm5oNXUyOHJaM2RHbjlpY0RyNGE0ZGx2eVYvSkg3R0lJMDlTL2RtTEhhMi9icVVacGNaUUlWQlArMVY1VWhsQnNDNng0LzUyUE9QWWFqVG5Kckg4U3VLSVp4YURIMndBaXNBN2Q1R0FFPSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMUNSdkFtUmpNZnlmSmhhS1cxdmZ5d0MiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZmluZCAvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZSAtdHlwZSBmIDI+L2Rldi9udWxsIHwgaGVhZCAtMzA7IGVjaG8gXCItLS1cIjsgbHMgLWxhIC9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlLyAyPi9kZXYvbnVsbCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFYQjlyaldCMjdyRGQ4YUdmbThEZjNQIiwibmFtZSI6Imxvb2tvdXQiLCJhcmd1bWVudHMiOnsicXVlcnkiOiJwaS11dGlscy1zZXR0aW5ncyBzZXR0aW5ncyBwYWdlIGNvbmZpZyB1c2FnZSJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0IjoyMDMsImNhY2hlUmVhZCI6MTM1OTcsImNhY2hlV3JpdGUiOjYwNDksInRvdGFsVG9rZW5zIjoxOTg1MCwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDUwNzUwMDAwMDAwMDAwMDA1LCJjYWNoZVJlYWQiOjAuMDA2Nzk4NSwiY2FjaGVXcml0ZSI6MC4wMzc4MDYyNSwidG90YWwiOjAuMDQ5Njg0NzV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDcwODQwMDB9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChsb29rb3V0KSJ9LCJpZCI6IjdhZmFmNGQ0IiwicGFyZW50SWQiOiIzMGRiNTUzNyIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjkuMTA1WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImI4OTE2ZTI3IiwicGFyZW50SWQiOiI3YWZhZjRkNCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTE6MjkuMTA2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFDUnZBbVJqTWZ5ZkpoYUtXMXZmeXdDIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktdHMtYXBlcnR1cmUvLmVudnJjXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS9zaGVsbC5uaXhcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlL3RzY29uZmlnLmpzb25cbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlLy5naXQvY29uZmlnXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS8uZ2l0L0hFQURcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlLy5naXQvaW5mby9leGNsdWRlXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS9iaW9tZS5qc29uXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS8uZGlyZW52L2Jpbi9uaXgtZGlyZW52LXJlbG9hZFxuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktdHMtYXBlcnR1cmUvLmRpcmVudi9DQUNIRURJUi5UQUdcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlLy5kaXJlbnYvbml4LXByb2ZpbGUtMjUuMTEtcnY0ejB2ZDd2MHBrYWRpbi5yY1xuLS0tXG50b3RhbCAxNlxuZHJ3eHIteHIteCAgOCBhbGlvdWRpYWxsbyBzdGFmZiAgMjU2IEZlYiAxNyAxNzo1MSAuXG5kcnd4ci14ci14IDYxIGFsaW91ZGlhbGxvIHN0YWZmIDE5NTIgRmViIDE3IDE3OjQwIC4uXG5kcnd4ci14ci14ICA2IGFsaW91ZGlhbGxvIHN0YWZmICAxOTIgRmViIDE3IDE3OjUxIC5kaXJlbnZcbi1ydy1yLS1yLS0gIDEgYWxpb3VkaWFsbG8gc3RhZmYgIDUxOSBGZWIgMTcgMTc6NTAgLmVudnJjXG5kcnd4ci14ci14ICA3IGFsaW91ZGlhbGxvIHN0YWZmICAyMjQgRmViIDE3IDE3OjQwIC5naXRcbi1ydy1yLS1yLS0gIDEgYWxpb3VkaWFsbG8gc3RhZmYgIDUxOSBGZWIgMTcgMTc6NTEgYmlvbWUuanNvblxuLXJ3LXItLXItLSAgMSBhbGlvdWRpYWxsbyBzdGFmZiAgMTExIEZlYiAxNyAxNzo1MCBzaGVsbC5uaXhcbi1ydy1yLS1yLS0gIDEgYWxpb3VkaWFsbG8gc3RhZmYgIDM0MyBGZWIgMTcgMTc6NTEgdHNjb25maWcuanNvblxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MDg5MTA0fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiY2Y0YmEzZGIiLCJwYXJlbnRJZCI6ImI4OTE2ZTI3IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MTo0My4yNDdaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVhCOXJqV0IyN3JEZDhhR2ZtOERmM1AiLCJ0b29sTmFtZSI6Imxvb2tvdXQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJBYm9ydGVkIn1dLCJkZXRhaWxzIjp7Il9yZW5kZXJLZXkiOiJ0b29sdV8wMVhCOXJqV0IyN3JEZDhhR2ZtOERmM1AiLCJxdWVyeSI6InBpLXV0aWxzLXNldHRpbmdzIHNldHRpbmdzIHBhZ2UgY29uZmlnIHVzYWdlIiwic2tpbGxzUmVzb2x2ZWQiOjAsInRvb2xDYWxscyI6W3sidG9vbENhbGxJZCI6InRvb2xfc2VtYW50aWNfc2VhcmNoX2VJUzBPNW9Ra09GZWhDNjZaZmlLIiwidG9vbE5hbWUiOiJzZW1hbnRpY19zZWFyY2giLCJhcmdzIjp7InF1ZXJ5IjoiaG93IGlzIHBpLXV0aWxzLXNldHRpbmdzIHVzZWQgaW4gdGhlIHNldHRpbmdzIHBhZ2UgY29uZmlndXJhdGlvbiJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MDkxMjI5LCJwYXJ0aWFsUmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9XSwiZGV0YWlscyI6eyJpbmRleGluZyI6ZmFsc2V9fSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InRzY29uZmlnLmpzb246MVxuICB7XG4gICAgXCJjb21waWxlck9wdGlvbnNcIjoge1xuICAgICAgXCJ0YXJnZXRcIjogXCJFUzIwMjJcIixcbiAgICAgIFwibW9kdWxlXCI6IFwiRVNOZXh0XCIsXG4gICAgICBcIm1vZHVsZVJlc29sdXRpb25cIjogXCJidW5kbGVyXCIsXG4gICAgICBcInN0cmljdFwiOiB0cnVlLFxuICAgICAgXCJlc01vZHVsZUludGVyb3BcIjogdHJ1ZSxcbiAgICAgIFwic2tpcExpYkNoZWNrXCI6IHRydWUsXG4gICAgICBcImZvcmNlQ29uc2lzdGVudENhc2luZ0luRmlsZU5hbWVzXCI6IHRydWUsXG4gICAgICBcInJlc29sdmVKc29uTW9kdWxlXCI6IHRydWUsXG4gICAgICBcIm5vRW1pdFwiOiB0cnVlXG4gICAgfSxcbiAgICBcImluY2x1ZGVcIjogW1wic3JjLyoqLypcIl0sXG4gICAgXCJleGNsdWRlXCI6IFtcIm5vZGVfbW9kdWxlc1wiXVxuICAuLi4gKCs1IG1vcmUgbGluZXMpXG5cbmJpb21lLmpzb246MVxuICB7XG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMy4xMy9zY2hlbWEuanNvblwiLFxuICAgIFwidmNzXCI6IHtcbiAgICAgIFwiZW5hYmxlZFwiOiB0cnVlLFxuICAgICAgXCJjbGllbnRLaW5kXCI6IFwiZ2l0XCIsXG4gICAgICBcInVzZUlnbm9yZUZpbGVcIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJmaWxlc1wiOiB7XG4gICAgICBcImluY2x1ZGVzXCI6IFtcIioqLyoudHNcIiwgXCIqKi8qLmpzb25cIl0sXG4gICAgICBcImlnbm9yZVVua25vd25cIjogdHJ1ZVxuICAgIH0sXG4gICAgXCJhc3Npc3RcIjoge1xuICAgICAgXCJhY3Rpb25zXCI6IHtcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAuLi4gKCsyMCBtb3JlIGxpbmVzKVxuXG5vc2dyZXAgcmVzdWx0cyAoMiBtYXRjaGVzIGFjcm9zcyAyIGZpbGVzKVxuIn1dfSwiZW5kZWRBdCI6MTc3MTM0NzA5MjY4MiwiZHVyYXRpb25NcyI6MTQ1M31dLCJhYm9ydGVkIjp0cnVlLCJ1c2FnZSI6eyJpbnB1dFRva2VucyI6MTAzMCwib3V0cHV0VG9rZW5zIjoyMSwiY2FjaGVSZWFkVG9rZW5zIjowLCJjYWNoZVdyaXRlVG9rZW5zIjowLCJlc3RpbWF0ZWRUb2tlbnMiOjEwNTEsImxsbUNvc3QiOjAuMDAwNTc4LCJ0b29sQ29zdCI6MCwidG90YWxDb3N0IjowLjAwMDU3OH0sInJlc29sdmVkTW9kZWwiOnsicHJvdmlkZXIiOiJvcGVucm91dGVyIiwiaWQiOiJnb29nbGUvZ2VtaW5pLTMtZmxhc2gtcHJldmlldyJ9LCJjd2QiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZSJ9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MTAzMjQ2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiM2UxNGE5M2UiLCJwYXJlbnRJZCI6ImNmNGJhM2RiIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MTo0My4yNDlaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W10sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MCwib3V0cHV0IjowLCJjYWNoZVJlYWQiOjAsImNhY2hlV3JpdGUiOjAsInRvdGFsVG9rZW5zIjowLCJjb3N0Ijp7ImlucHV0IjowLCJvdXRwdXQiOjAsImNhY2hlUmVhZCI6MCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjB9fSwic3RvcFJlYXNvbiI6ImFib3J0ZWQiLCJ0aW1lc3RhbXAiOjE3NzEzNDcxMDMyNDcsImVycm9yTWVzc2FnZSI6Ik9wZXJhdGlvbiBhYm9ydGVkIn19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUifSwiaWQiOiIzYTYzOTU5OCIsInBhcmVudElkIjoiM2UxNGE5M2UiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUxOjQzLjI0OVoifSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlICh0aGlua2luZy4uLikifSwiaWQiOiIwNjQ2NWQ1OSIsInBhcmVudElkIjoiM2E2Mzk1OTgiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjE5LjUzN1oifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI1ZTljNDU1NiIsInBhcmVudElkIjoiMDY0NjVkNTkiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjE5LjUzOFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoibG9vayBhdCB0aGUgY29kZSBvZiBwaS1jb25maWcgaW4gfi9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvIGlmIG5lZWRlZCJ9XSwidGltZXN0YW1wIjoxNzcxMzQ3MTk5NTM2fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoYmFzaCkifSwiaWQiOiJjNDFjZmUxOCIsInBhcmVudElkIjoiNWU5YzQ1NTYiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjIzLjAwNloifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4N2Y3YmQ0NCIsInBhcmVudElkIjoiYzQxY2ZlMTgiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjIzLjAwNloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxSzZEczFlTkFuVEh6aXBvQXZmY3RoVSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJmaW5kIC9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvIC1wYXRoIFwiKi9waS11dGlscy1zZXR0aW5ncypcIiAtbyAtcGF0aCBcIiovY29uZmlnKlwiIDI+L2Rldi9udWxsIHwgZ3JlcCAtdiBub2RlX21vZHVsZXMgfCBncmVwIC12IC5naXQgfCBoZWFkIC0zMCJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6Mywib3V0cHV0IjoxMTksImNhY2hlUmVhZCI6MTk2NDYsImNhY2hlV3JpdGUiOjg5MywidG90YWxUb2tlbnMiOjIwNjYxLCJjb3N0Ijp7ImlucHV0IjowLjAwMDAxNTAwMDAwMDAwMDAwMDAwMiwib3V0cHV0IjowLjAwMjk3NSwiY2FjaGVSZWFkIjowLjAwOTgyMywiY2FjaGVXcml0ZSI6MC4wMDU1ODEyNSwidG90YWwiOjAuMDE4Mzk0MjV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDcxOTk1Mzh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiYTkzZmRhZSIsInBhcmVudElkIjoiODdmN2JkNDQiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjIzLjk4NVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxSzZEczFlTkFuVEh6aXBvQXZmY3RoVSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IihubyBvdXRwdXQpIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MjAzOTg0fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoYmFzaCkifSwiaWQiOiIzYTVjZWMxZCIsInBhcmVudElkIjoiYmE5M2ZkYWUiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjI3Ljc5NVoifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIwNzMzMWJjMiIsInBhcmVudElkIjoiM2E1Y2VjMWQiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjI3Ljc5NVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxRG42TGlnS3VBZHZ0elBvOWN6ZkhBUSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJscyAvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zLyJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0Ijo3NSwiY2FjaGVSZWFkIjoyMDUzOSwiY2FjaGVXcml0ZSI6MTM1LCJ0b3RhbFRva2VucyI6MjA3NTAsImNvc3QiOnsiaW5wdXQiOjAuMDAwMDA1LCJvdXRwdXQiOjAuMDAxODc1MDAwMDAwMDAwMDAwMSwiY2FjaGVSZWFkIjowLjAxMDI2OTQ5OTk5OTk5OTk5OSwiY2FjaGVXcml0ZSI6MC4wMDA4NDM3NSwidG90YWwiOjAuMDEyOTkzMjV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDcyMDM5ODV9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJlYmRlNjlhZCIsInBhcmVudElkIjoiMDczMzFiYzIiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjI3LjgxNloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxRG42TGlnS3VBZHZ0elBvOWN6ZkhBUSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkFHRU5UUy5tZFxuYXJjaGl2ZVxuYmlvbWUuanNvblxuZXh0ZW5zaW9uc1xuZmxha2UubG9ja1xuZmxha2Uubml4XG5ub2RlX21vZHVsZXNcbnBhY2thZ2UuanNvblxucGFja2FnZXNcbnBucG0tbG9jay55YW1sXG5wbnBtLXdvcmtzcGFjZS55YW1sXG5wcm9tcHRzXG5SRUFETUUubWRcbnNjcmlwdHNcbnRoZW1lc1xudG1wXG50c2NvbmZpZy5qc29uXG50c2NvbmZpZy50c2J1aWxkaW5mb1xudml0ZXN0LmNvbmZpZy50c1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MjA3ODE1fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoYmFzaCkifSwiaWQiOiIzNGY1ZGE3NiIsInBhcmVudElkIjoiZWJkZTY5YWQiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjMxLjEyN1oifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiY2FlMTcwMSIsInBhcmVudElkIjoiMzRmNWRhNzYiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjMxLjEyOFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxN2lZaFVwOFhaOGFRbTNkejJFbWZrRiIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJscyAvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzLyAvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjEwMiwiY2FjaGVSZWFkIjoyMDY3NCwiY2FjaGVXcml0ZSI6MTcxLCJ0b3RhbFRva2VucyI6MjA5NDgsImNvc3QiOnsiaW5wdXQiOjAuMDAwMDA1LCJvdXRwdXQiOjAuMDAyNTUsImNhY2hlUmVhZCI6MC4wMTAzMzY5OTk5OTk5OTk5OTksImNhY2hlV3JpdGUiOjAuMDAxMDY4NzUsInRvdGFsIjowLjAxMzk2MDc1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3MjA3ODE2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNGJlZmFiNDciLCJwYXJlbnRJZCI6ImJjYWUxNzAxIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MzozMS4xNTlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMTdpWWhVcDhYWjhhUW0zZHoyRW1ma0YiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvOlxuYnJlYWRjcnVtYnNcbmRlZmF1bHRzXG5leHRlbnNpb24tZGV2XG5ndWFyZHJhaWxzXG5pbnRyb3NwZWN0aW9uXG5uZW92aW1cbnBsYW5uaW5nXG5wcmVzZW50ZXJcbnByb2Nlc3Nlc1xucHJvdmlkZXJzXG5zdWJhZ2VudHNcbnRoZS1kdW1iLXpvbmVcbnRvb2xjaGFpblxuXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzLzpcbmFnZW50LWtpdFxuc2V0dGluZ3NcbnRzY29uZmlnXG51aVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MjExMTU5fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoYmFzaCkifSwiaWQiOiI5YTI4Y2JiZSIsInBhcmVudElkIjoiNGJlZmFiNDciLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjM0LjI4OFoifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI0YTYxOWFmMSIsInBhcmVudElkIjoiOWEyOGNiYmUiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjM0LjI4OVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxU3prU1A0NEFVZm5oQkR6OU1haEJpcyIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJmaW5kIC9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvcGFja2FnZXMvc2V0dGluZ3MgLXR5cGUgZiAtbm90IC1wYXRoIFwiKi9ub2RlX21vZHVsZXMvKlwiIC1ub3QgLXBhdGggXCIqLy5naXQvKlwiIHwgaGVhZCAtMzAifX1dLCJhcGkiOiJhbnRocm9waWMtbWVzc2FnZXMiLCJwcm92aWRlciI6ImFudGhyb3BpYyIsIm1vZGVsIjoiY2xhdWRlLW9wdXMtNC02IiwidXNhZ2UiOnsiaW5wdXQiOjEsIm91dHB1dCI6MTA1LCJjYWNoZVJlYWQiOjIwODQ1LCJjYWNoZVdyaXRlIjoyMjEsInRvdGFsVG9rZW5zIjoyMTE3MiwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDI2MjUsImNhY2hlUmVhZCI6MC4wMTA0MjI1LCJjYWNoZVdyaXRlIjowLjAwMTM4MTI1LCJ0b3RhbCI6MC4wMTQ0MzM3NX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzIxMTE2MH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjIyNzdiZWZiIiwicGFyZW50SWQiOiI0YTYxOWFmMSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6MzQuMzI2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFTemtTUDQ0QVVmbmhCRHo5TWFoQmlzIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9oZWxwZXJzLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzL3NldHRpbmdzL0NIQU5HRUxPRy5tZFxuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9zZXR0aW5ncy1jb21tYW5kLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzL3NldHRpbmdzL1JFQURNRS5tZFxuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9jb21wb25lbnRzL3NlY3Rpb25lZC1zZXR0aW5ncy50c1xuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9jb21wb25lbnRzL2Z1enp5LXNlbGVjdG9yLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzL3NldHRpbmdzL2NvbXBvbmVudHMvcGF0aC1hcnJheS1lZGl0b3IudHNcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvcGFja2FnZXMvc2V0dGluZ3MvY29tcG9uZW50cy9hcnJheS1lZGl0b3IudHNcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvcGFja2FnZXMvc2V0dGluZ3MvcGFja2FnZS5qc29uXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzL3NldHRpbmdzL2luZGV4LnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzL3NldHRpbmdzL2NvbmZpZy1sb2FkZXIudHNcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIxNDMyNn19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiYzU1OTFlNzMiLCJwYXJlbnRJZCI6IjIyNzdiZWZiIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MzozNy43NjdaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTdmOWFlYmMiLCJwYXJlbnRJZCI6ImM1NTkxZTczIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1MzozNy43NjdaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMU1HOEZycDZ2blZvMnE2NHV1eTQ4VW4iLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9SRUFETUUubWQifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxMThidUt3OXpNbnkydmRpbmZ5R3dvMiIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL3BhY2thZ2VzL3NldHRpbmdzL2luZGV4LnRzIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjE0MywiY2FjaGVSZWFkIjoyMTA2NiwiY2FjaGVXcml0ZSI6NDgyLCJ0b3RhbFRva2VucyI6MjE2OTIsImNvc3QiOnsiaW5wdXQiOjAuMDAwMDA1LCJvdXRwdXQiOjAuMDAzNTc1LCJjYWNoZVJlYWQiOjAuMDEwNTMyOTk5OTk5OTk5OTk5LCJjYWNoZVdyaXRlIjowLjAwMzAxMjUsInRvdGFsIjowLjAxNzEyNTV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDcyMTQzMjl9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6ImUyMTk2ZTU5IiwicGFyZW50SWQiOiI1N2Y5YWViYyIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6MzcuNzc5WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjdmMzgzMjY5IiwicGFyZW50SWQiOiJlMjE5NmU1OSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6MzcuNzg2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFNRzhGcnA2dm5WbzJxNjR1dXk0OFVuIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBAYWxpb3UvcGktdXRpbHMtc2V0dGluZ3NcblxuU2hhcmVkIHNldHRpbmdzIGluZnJhc3RydWN0dXJlIGZvciBbcGldKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50KSBleHRlbnNpb25zLiBQcm92aWRlcyBjb25maWcgbG9hZGluZywgYSBzZXR0aW5ncyBVSSBjb21tYW5kIHdpdGggTG9jYWwvR2xvYmFsIHRhYnMsIGFuZCByZXVzYWJsZSBUVUkgY29tcG9uZW50cy5cblxuVGhpcyBpcyBhIHV0aWxpdHkgbGlicmFyeSwgbm90IGEgcGkgZXh0ZW5zaW9uLiBJdCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgZGVwZW5kZW5jeSBieSBleHRlbnNpb25zIHRoYXQgbmVlZCBhIHNldHRpbmdzIFVJIG9yIEpTT04gY29uZmlnIG1hbmFnZW1lbnQuXG5cbiMjIEluc3RhbGxcblxuYGBgYmFzaFxucG5wbSBhZGQgQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzXG5gYGBcblxuIyMgQVBJXG5cbiMjIyBDb25maWdMb2FkZXJcblxuR2VuZXJpYyBKU09OIGNvbmZpZyBsb2FkZXIgd2l0aCBnbG9iYWwgKyBwcm9qZWN0IHNjb3BlcywgZGVlcCBtZXJnZSwgYW5kIHZlcnNpb25lZCBtaWdyYXRpb25zLlxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBDb25maWdMb2FkZXIsIHR5cGUgTWlncmF0aW9uIH0gZnJvbSBcIkBhbGlvdS9waS11dGlscy1zZXR0aW5nc1wiO1xuXG5pbnRlcmZhY2UgTXlDb25maWcge1xuICBmZWF0dXJlcz86IHsgZGFya01vZGU/OiBib29sZWFuIH07XG59XG5cbmludGVyZmFjZSBSZXNvbHZlZENvbmZpZyB7XG4gIGZlYXR1cmVzOiB7IGRhcmtNb2RlOiBib29sZWFuIH07XG59XG5cbmNvbnN0IG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbjxNeUNvbmZpZz5bXSA9IFtcbiAge1xuICAgIG5hbWU6IFwidjEtdXBncmFkZVwiLFxuICAgIHNob3VsZFJ1bjogKGNvbmZpZykgPT4gIWNvbmZpZy5mZWF0dXJlcyxcbiAgICBydW46IChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgZmVhdHVyZXM6IHt9IH0pLFxuICB9LFxuXTtcblxuY29uc3QgY29uZmlnTG9hZGVyID0gbmV3IENvbmZpZ0xvYWRlcjxNeUNvbmZpZywgUmVzb2x2ZWRDb25maWc+KFxuICBcIm15LWV4dGVuc2lvblwiLCAvLyByZWFkcyB+Ly5waS9hZ2VudC9leHRlbnNpb25zL215LWV4dGVuc2lvbi5qc29uICsgLnBpL2V4dGVuc2lvbnMvbXktZXh0ZW5zaW9uLmpzb25cbiAgeyBmZWF0dXJlczogeyBkYXJrTW9kZTogZmFsc2UgfSB9LCAvLyBkZWZhdWx0c1xuICB7IG1pZ3JhdGlvbnMgfSxcbik7XG5cbmF3YWl0IGNvbmZpZ0xvYWRlci5sb2FkKCk7XG5jb25zdCBjb25maWcgPSBjb25maWdMb2FkZXIuZ2V0Q29uZmlnKCk7IC8vIFJlc29sdmVkQ29uZmlnIChkZWZhdWx0cyBtZXJnZWQgd2l0aCBnbG9iYWwgKyBwcm9qZWN0KVxuYGBgXG5cbkFuIG9wdGlvbmFsIGBhZnRlck1lcmdlYCBob29rIHJ1bnMgYWZ0ZXIgdGhlIGRlZXAgbWVyZ2UgZm9yIGxvZ2ljIHRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIGFzIGEgc2ltcGxlIG1lcmdlIChlLmcuLCBvbmUgZmllbGQgcmVwbGFjaW5nIGFub3RoZXIpOlxuXG5gYGB0eXBlc2NyaXB0XG5uZXcgQ29uZmlnTG9hZGVyKFwibXktZXh0XCIsIGRlZmF1bHRzLCB7XG4gIGFmdGVyTWVyZ2U6IChyZXNvbHZlZCwgZ2xvYmFsLCBwcm9qZWN0KSA9PiB7XG4gICAgaWYgKHByb2plY3Q/LmN1c3RvbUZpZWxkKSB7XG4gICAgICByZXNvbHZlZC5kZXJpdmVkRmllbGQgPSBwcm9qZWN0LmN1c3RvbUZpZWxkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH0sXG59KTtcbmBgYFxuXG4jIyMgcmVnaXN0ZXJTZXR0aW5nc0NvbW1hbmRcblxuQ3JlYXRlcyBhIGAvbmFtZTpzZXR0aW5nc2AgY29tbWFuZCB3aXRoIExvY2FsL0dsb2JhbCB0YWJzLCBkcmFmdC1iYXNlZCBlZGl0aW5nLCBhbmQgQ3RybCtTIHRvIHNhdmUuXG5cbkFsbCBjaGFuZ2VzIChib29sZWFuIHRvZ2dsZXMsIGVudW0gY3ljbGluZywgc3VibWVudSBlZGl0cykgYXJlIGhlbGQgaW4gbWVtb3J5IGFzIGRyYWZ0cy4gTm90aGluZyBpcyB3cml0dGVuIHRvIGRpc2sgdW50aWwgdGhlIHVzZXIgcHJlc3NlcyBDdHJsK1MuIEVzYyBleGl0cyB3aXRob3V0IHNhdmluZy4gRGlydHkgdGFicyBzaG93IGEgYCpgIG1hcmtlci5cblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgcmVnaXN0ZXJTZXR0aW5nc0NvbW1hbmQsIHR5cGUgU2V0dGluZ3NTZWN0aW9uIH0gZnJvbSBcIkBhbGlvdS9waS11dGlscy1zZXR0aW5nc1wiO1xuXG5yZWdpc3RlclNldHRpbmdzQ29tbWFuZDxNeUNvbmZpZywgUmVzb2x2ZWRDb25maWc+KHBpLCB7XG4gIGNvbW1hbmROYW1lOiBcIm15LWV4dDpzZXR0aW5nc1wiLFxuICB0aXRsZTogXCJNeSBFeHRlbnNpb24gU2V0dGluZ3NcIixcbiAgY29uZmlnU3RvcmU6IGNvbmZpZ0xvYWRlciwgLy8gaW1wbGVtZW50cyBDb25maWdTdG9yZSBpbnRlcmZhY2VcbiAgYnVpbGRTZWN0aW9uczogKHRhYkNvbmZpZywgcmVzb2x2ZWQsIHsgc2V0RHJhZnQgfSkgPT4gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIkdlbmVyYWxcIixcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJmZWF0dXJlcy5kYXJrTW9kZVwiLFxuICAgICAgICAgIGxhYmVsOiBcIkRhcmsgbW9kZVwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkVuYWJsZSBkYXJrIG1vZGVcIixcbiAgICAgICAgICBjdXJyZW50VmFsdWU6ICh0YWJDb25maWc/LmZlYXR1cmVzPy5kYXJrTW9kZSA/PyByZXNvbHZlZC5mZWF0dXJlcy5kYXJrTW9kZSkgPyBcIm9uXCIgOiBcIm9mZlwiLFxuICAgICAgICAgIHZhbHVlczogW1wib25cIiwgXCJvZmZcIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59KTtcbmBgYFxuXG4jIyMgU3VibWVudSBzdXBwb3J0XG5cbkl0ZW1zIGNhbiBvcGVuIHN1Ym1lbnVzIGJ5IHByb3ZpZGluZyBhIGBzdWJtZW51YCBmYWN0b3J5LiBVc2UgYHNldERyYWZ0YCBpbnNpZGUgc3VibWVudSBgb25TYXZlYCB0byBrZWVwIGNoYW5nZXMgaW4gdGhlIGRyYWZ0IChzYW1lIHNhdmUgbW9kZWwgYXMgc2ltcGxlIHZhbHVlcyk6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IEFycmF5RWRpdG9yLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gXCJAYWxpb3UvcGktdXRpbHMtc2V0dGluZ3NcIjtcblxue1xuICBpZDogXCJ0YWdzXCIsXG4gIGxhYmVsOiBcIlRhZ3NcIixcbiAgY3VycmVudFZhbHVlOiBgJHt0YWdzLmxlbmd0aH0gaXRlbXNgLFxuICBzdWJtZW51OiAoX3ZhbCwgZG9uZSkgPT4ge1xuICAgIGxldCBsYXRlc3QgPSBbLi4udGFnc107XG4gICAgcmV0dXJuIG5ldyBBcnJheUVkaXRvcih7XG4gICAgICBsYWJlbDogXCJUYWdzXCIsXG4gICAgICBpdGVtczogWy4uLnRhZ3NdLFxuICAgICAgdGhlbWU6IGdldFNldHRpbmdzTGlzdFRoZW1lKCksXG4gICAgICBvblNhdmU6IChpdGVtcykgPT4ge1xuICAgICAgICBsYXRlc3QgPSBpdGVtcztcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHN0cnVjdHVyZWRDbG9uZSh0YWJDb25maWcgPz8ge30pIGFzIE15Q29uZmlnO1xuICAgICAgICBzZXROZXN0ZWRWYWx1ZSh1cGRhdGVkLCBcInRhZ3NcIiwgaXRlbXMpO1xuICAgICAgICBzZXREcmFmdCh1cGRhdGVkKTtcbiAgICAgIH0sXG4gICAgICBvbkRvbmU6ICgpID0+IGRvbmUoYCR7bGF0ZXN0Lmxlbmd0aH0gaXRlbXNgKSxcbiAgICB9KTtcbiAgfSxcbn1cbmBgYFxuXG4jIyMgQ29uZmlnU3RvcmUgaW50ZXJmYWNlXG5cbkV4dGVuc2lvbnMgd2l0aCBjdXN0b20gY29uZmlnIGxvYWRlcnMgY2FuIGltcGxlbWVudCBgQ29uZmlnU3RvcmVgIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgYENvbmZpZ0xvYWRlcmA6XG5cbmBgYHR5cGVzY3JpcHRcbmludGVyZmFjZSBDb25maWdTdG9yZTxUQ29uZmlnLCBUUmVzb2x2ZWQ+IHtcbiAgZ2V0Q29uZmlnKCk6IFRSZXNvbHZlZDtcbiAgZ2V0UmF3Q29uZmlnKHNjb3BlOiBcImdsb2JhbFwiIHwgXCJwcm9qZWN0XCIpOiBUQ29uZmlnIHwgbnVsbDtcbiAgaGFzQ29uZmlnKHNjb3BlOiBcImdsb2JhbFwiIHwgXCJwcm9qZWN0XCIpOiBib29sZWFuO1xuICBzYXZlKHNjb3BlOiBcImdsb2JhbFwiIHwgXCJwcm9qZWN0XCIsIGNvbmZpZzogVENvbmZpZyk6IFByb21pc2U8dm9pZD47XG59XG5gYGBcblxuIyMjIENvbXBvbmVudHNcblxuLSAqKlNlY3Rpb25lZFNldHRpbmdzKio6IEdyb3VwZWQgc2V0dGluZ3MgbGlzdCB3aXRoIHNlYXJjaCBmaWx0ZXJpbmcgYW5kIGN1cnNvciBwcmVzZXJ2YXRpb24gb24gdXBkYXRlLlxuLSAqKkFycmF5RWRpdG9yKio6IFN0cmluZyBhcnJheSBlZGl0b3Igd2l0aCBhZGQvcmVtb3ZlL3Jlb3JkZXIuXG4tICoqUGF0aEFycmF5RWRpdG9yKio6IFBhdGgtZm9jdXNlZCBhcnJheSBlZGl0b3Igd2l0aCBUYWIgY29tcGxldGlvbiBpbiBhZGQvZWRpdCBtb2RlLlxuXG4jIyMgSGVscGVyc1xuXG4tIGBzZXROZXN0ZWRWYWx1ZShvYmosIFwiYS5iLmNcIiwgdmFsdWUpYDogU2V0IGEgZGVlcGx5IG5lc3RlZCB2YWx1ZSBieSBkb3Qtc2VwYXJhdGVkIHBhdGguXG4tIGBnZXROZXN0ZWRWYWx1ZShvYmosIFwiYS5iLmNcIilgOiBHZXQgYSBkZWVwbHkgbmVzdGVkIHZhbHVlIGJ5IGRvdC1zZXBhcmF0ZWQgcGF0aC5cbi0gYGRpc3BsYXlUb1N0b3JhZ2VWYWx1ZShpZCwgZGlzcGxheVZhbHVlKWA6IENvbnZlcnQgZGlzcGxheSB2YWx1ZXMgKGBcImVuYWJsZWRcIi9cImRpc2FibGVkXCJgLCBgXCJvblwiL1wib2ZmXCJgKSB0byBzdG9yYWdlIHZhbHVlcyAoYHRydWUvZmFsc2VgKS5cblxuIyMgRXhwb3J0c1xuXG5gYGB0eXBlc2NyaXB0XG5leHBvcnQgeyBDb25maWdMb2FkZXIsIHR5cGUgQ29uZmlnU3RvcmUsIHR5cGUgTWlncmF0aW9uIH0gZnJvbSBcIi4vY29uZmlnLWxvYWRlclwiO1xuZXhwb3J0IHsgcmVnaXN0ZXJTZXR0aW5nc0NvbW1hbmQsIHR5cGUgU2V0dGluZ3NDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuL3NldHRpbmdzLWNvbW1hbmRcIjtcbmV4cG9ydCB7IFNlY3Rpb25lZFNldHRpbmdzLCB0eXBlIFNlY3Rpb25lZFNldHRpbmdzT3B0aW9ucywgdHlwZSBTZXR0aW5nc1NlY3Rpb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3NlY3Rpb25lZC1zZXR0aW5nc1wiO1xuZXhwb3J0IHsgQXJyYXlFZGl0b3IsIHR5cGUgQXJyYXlFZGl0b3JPcHRpb25zIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hcnJheS1lZGl0b3JcIjtcbmV4cG9ydCB7IFBhdGhBcnJheUVkaXRvciwgdHlwZSBQYXRoQXJyYXlFZGl0b3JPcHRpb25zIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYXRoLWFycmF5LWVkaXRvclwiO1xuZXhwb3J0IHsgc2V0TmVzdGVkVmFsdWUsIGdldE5lc3RlZFZhbHVlLCBkaXNwbGF5VG9TdG9yYWdlVmFsdWUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5gYGBcbiJ9LHsidHlwZSI6InRleHQiLCJ0ZXh0IjoiTG9hZGVkIHN1YmRpcmVjdG9yeSBjb250ZXh0IGZyb20gfi9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvQUdFTlRTLm1kXG5cbiMgUGkgRXh0ZW5zaW9uc1xuXG5UaGlzIHJlcG9zaXRvcnkgaG9zdHMgY3VzdG9tIGV4dGVuc2lvbnMgZm9yIFtQaV0oaHR0cHM6Ly9naXRodWIuY29tL21hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnQpLCBhIGNvZGluZyBhZ2VudC5cblxuQWxsIHBhY2thZ2VzIGluIHRoaXMgcmVwb3NpdG9yeSBhcmUgcHVibGlzaGVkIHVuZGVyIHRoZSBgQGFsaW91YCBzY29wZSwgbm90IGBAYW50aHJvcGljYCBvciBgQGFudGhyb3BpYy1haWAuXG5cbiMjIFN0cnVjdHVyZVxuXG4tIGBleHRlbnNpb25zL2AgLSBDdXN0b20gUGkgZXh0ZW5zaW9uc1xuLSBgcGFja2FnZXMvYCAtIFNoYXJlZCBwYWNrYWdlcyAoZS5nLiwgdHNjb25maWcpXG5cbiMjIEV4dGVuc2lvbnNcblxuLSBgYnJlYWRjcnVtYnNgIC0gU2Vzc2lvbiBoaXN0b3J5IHRvb2xzLiBTZWFyY2ggcGFzdCBzZXNzaW9ucywgZXh0cmFjdCBpbmZvcm1hdGlvbiwgaGFuZCBvZmYgY29udGV4dCB0byBuZXcgc2Vzc2lvbnMuXG4tIGBkZWZhdWx0c2AgLSBTZW5zaWJsZSBkZWZhdWx0cyBhbmQgcXVhbGl0eS1vZi1saWZlIGltcHJvdmVtZW50cy5cbi0gYGV4dGVuc2lvbi1kZXZgIC0gVG9vbHMgYW5kIGNvbW1hbmRzIGZvciBkZXZlbG9waW5nIGFuZCB1cGRhdGluZyBQaSBleHRlbnNpb25zLlxuLSBgZ3VhcmRyYWlsc2AgLSBTZWN1cml0eSBob29rcyB0byBwcmV2ZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBvcGVyYXRpb25zLlxuLSBgaW50cm9zcGVjdGlvbmAgLSBJbnNwZWN0IFBpIGFnZW50IGludGVybmFsczogc3lzdGVtIHByb21wdCwgdG9vbHMsIHNraWxscywgY29udGV4dCB1c2FnZS5cbi0gYG5lb3ZpbWAgLSBCaWRpcmVjdGlvbmFsIGludGVncmF0aW9uIGJldHdlZW4gUGkgYW5kIE5lb3ZpbS5cbi0gYHBsYW5uaW5nYCAtIFR1cm4gY29udmVyc2F0aW9ucyBpbnRvIGltcGxlbWVudGF0aW9uIHBsYW5zIGFuZCBtYW5hZ2Ugc2F2ZWQgcGxhbnMuXG4tIGBwcmVzZW50ZXJgIC0gVGVybWluYWwtc3BlY2lmaWMgcHJlc2VudGF0aW9uIGZvciBldmVudHMgZW1pdHRlZCBieSBvdGhlciBleHRlbnNpb25zLlxuLSBgcHJvY2Vzc2VzYCAtIE1hbmFnZSBiYWNrZ3JvdW5kIHByb2Nlc3Nlcy4gU3RhcnQgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIChkZXYgc2VydmVycywgYnVpbGQgd2F0Y2hlcnMsIGxvZyB0YWlsZXJzKSB3aXRob3V0IGJsb2NraW5nIHRoZSBjb252ZXJzYXRpb24uXG4tIGBwcm92aWRlcnNgIC0gUmVnaXN0ZXIgY3VzdG9tIHByb3ZpZGVycyBhbmQgc2hvdyB1bmlmaWVkIHJhdGUtbGltaXQgYW5kIHVzYWdlIGRhc2hib2FyZHMuXG4tIGBzdWJhZ2VudHNgIC0gRnJhbWV3b3JrIGZvciBzcGF3bmluZyBzcGVjaWFsaXplZCBzdWJhZ2VudHMgd2l0aCBjdXN0b20gdG9vbHMsIGNvbnNpc3RlbnQgVUkgcmVuZGVyaW5nLCBhbmQgbG9nZ2luZy5cbi0gYHRoZS1kdW1iLXpvbmVgIC0gRGV0ZWN0cyB3aGVuIGFuIEFJIHNlc3Npb24gaXMgZGVncmFkaW5nIGFuZCBzaG93cyBhIHdhcm5pbmcgb3ZlcmxheS5cbi0gYHRvb2xjaGFpbmAgLSBPcGluaW9uYXRlZCB0b29sY2hhaW4gZW5mb3JjZW1lbnQuIFRyYW5zcGFyZW50bHkgcmV3cml0ZXMgY29tbWFuZHMgdG8gdXNlIHByZWZlcnJlZCB0b29scy5cblxuIyMgRGV2ZWxvcG1lbnRcblxuVXNlcyBwbnBtIHdvcmtzcGFjZXMuIE5peCBlbnZpcm9ubWVudCBhdmFpbGFibGUgdmlhIGBmbGFrZS5uaXhgLlxuXG5gYGBzaFxucG5wbSBpbnN0YWxsXG5wbnBtIHR5cGVjaGVja1xucG5wbSBsaW50XG5wbnBtIHJ1biBjaGVjazpwdWJsaWMtZGVwc1xuYGBgXG5cbiMjIyBQdWJsaWMgdnMgUHJpdmF0ZSBQYWNrYWdlc1xuXG5UaGlzIG1vbm9yZXBvIGNvbnRhaW5zIGJvdGggcHVibGlzaGVkIChwdWJsaWMpIGFuZCBpbnRlcm5hbCAocHJpdmF0ZSkgcGFja2FnZXM6XG5cbi0gKipQdWJsaWMgcGFja2FnZXMqKjogUHVibGlzaGVkIHRvIG5wbSwgaW5zdGFsbGFibGUgYnkgdXNlcnNcbiAgLSBNdXN0IGhhdmUgYFwicHJpdmF0ZVwiOiBmYWxzZWAgb3IgYFwicHVibGlzaENvbmZpZ1wiOiB7IFwiYWNjZXNzXCI6IFwicHVibGljXCIgfVwiYFxuICAtIENhbm5vdCBkZXBlbmQgb24gcHJpdmF0ZSB3b3Jrc3BhY2UgcGFja2FnZXNcbiAgLSBFeGFtcGxlczogYEBhbGlvdS9waS11dGlscy1zZXR0aW5nc2AsIGBAYWxpb3UvcGktdXRpbHMtdWlgXG5cbi0gKipQcml2YXRlIHBhY2thZ2VzKio6IEludGVybmFsIG9ubHksIG5vdCBwdWJsaXNoZWRcbiAgLSBIYXZlIGBcInByaXZhdGVcIjogdHJ1ZWAgaW4gcGFja2FnZS5qc29uXG4gIC0gQ2FuIGRlcGVuZCBvbiBhbnl0aGluZ1xuICAtIEV4YW1wbGVzOiBFeHRlbnNpb25zLCBgQGFsaW91L3BpLWFnZW50LWtpdGBcblxuKipJbXBvcnRhbnQqKjogUHVibGljIHBhY2thZ2VzIGNhbm5vdCBkZXBlbmQgb24gcHJpdmF0ZSB3b3Jrc3BhY2UgcGFja2FnZXMuIFRoaXMgaXMgZW5mb3JjZWQgYnk6XG4tIFByZS1jb21taXQgaG9vayB0aGF0IGJsb2NrcyBpbnZhbGlkIGNvbW1pdHNcbi0gQ0kgY2hlY2sgdGhhdCBwcmV2ZW50cyBtZXJnaW5nIGludmFsaWQgZGVwZW5kZW5jaWVzXG5cblJ1biBgcG5wbSBydW4gY2hlY2s6cHVibGljLWRlcHNgIHRvIHZhbGlkYXRlIGRlcGVuZGVuY2llcy4gU2VlIGBzY3JpcHRzL1JFQURNRS5tZGAgZm9yIGRldGFpbHMuXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcyMTc3Nzh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI1ZjE2MDZlNyIsInBhcmVudElkIjoiN2YzODMyNjkiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjM3Ljc5NloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxMThidUt3OXpNbnkydmRpbmZ5R3dvMiIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8qKlxuICogQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzXG4gKlxuICogU2hhcmVkIHNldHRpbmdzIGluZnJhc3RydWN0dXJlIGZvciBwaSBleHRlbnNpb25zOlxuICogLSBDb25maWdMb2FkZXI6IGxvYWQvc2F2ZS9tZXJnZSBKU09OIGNvbmZpZ3MgZnJvbSBnbG9iYWwgKyBwcm9qZWN0IHBhdGhzXG4gKiAtIHJlZ2lzdGVyU2V0dGluZ3NDb21tYW5kOiBjcmVhdGUgYSBzZXR0aW5ncyBjb21tYW5kIHdpdGggTG9jYWwvR2xvYmFsIHRhYnNcbiAqIC0gU2VjdGlvbmVkU2V0dGluZ3M6IHNlY3Rpb25lZCBzZXR0aW5ncyBsaXN0IGNvbXBvbmVudFxuICogLSBBcnJheUVkaXRvcjogc3RyaW5nIGFycmF5IGVkaXRvciBzdWJtZW51IGNvbXBvbmVudFxuICogLSBIZWxwZXJzOiBuZXN0ZWQgdmFsdWUgYWNjZXNzLCBkaXNwbGF5LXRvLXN0b3JhZ2UgdmFsdWUgbWFwcGluZ1xuICovXG5cbmV4cG9ydCB7XG4gIEFycmF5RWRpdG9yLFxuICB0eXBlIEFycmF5RWRpdG9yT3B0aW9ucyxcbn0gZnJvbSBcIi4vY29tcG9uZW50cy9hcnJheS1lZGl0b3JcIjtcbmV4cG9ydCB7XG4gIEZ1enp5U2VsZWN0b3IsXG4gIHR5cGUgRnV6enlTZWxlY3Rvck9wdGlvbnMsXG59IGZyb20gXCIuL2NvbXBvbmVudHMvZnV6enktc2VsZWN0b3JcIjtcbmV4cG9ydCB7XG4gIFBhdGhBcnJheUVkaXRvcixcbiAgdHlwZSBQYXRoQXJyYXlFZGl0b3JPcHRpb25zLFxufSBmcm9tIFwiLi9jb21wb25lbnRzL3BhdGgtYXJyYXktZWRpdG9yXCI7XG5leHBvcnQge1xuICBTZWN0aW9uZWRTZXR0aW5ncyxcbiAgdHlwZSBTZWN0aW9uZWRTZXR0aW5nc09wdGlvbnMsXG4gIHR5cGUgU2V0dGluZ3NTZWN0aW9uLFxufSBmcm9tIFwiLi9jb21wb25lbnRzL3NlY3Rpb25lZC1zZXR0aW5nc1wiO1xuZXhwb3J0IHtcbiAgQ29uZmlnTG9hZGVyLFxuICB0eXBlIENvbmZpZ1N0b3JlLFxuICB0eXBlIE1pZ3JhdGlvbixcbiAgdHlwZSBTY29wZSxcbn0gZnJvbSBcIi4vY29uZmlnLWxvYWRlclwiO1xuZXhwb3J0IHtcbiAgZGlzcGxheVRvU3RvcmFnZVZhbHVlLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgc2V0TmVzdGVkVmFsdWUsXG59IGZyb20gXCIuL2hlbHBlcnNcIjtcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyU2V0dGluZ3NDb21tYW5kLFxuICB0eXBlIFNldHRpbmdzQ29tbWFuZE9wdGlvbnMsXG59IGZyb20gXCIuL3NldHRpbmdzLWNvbW1hbmRcIjtcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIxNzc5M319LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiNWY3MzRjNzMiLCJwYXJlbnRJZCI6IjVmMTYwNmU3IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo0MS41NTZaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMzgyNzIxYmYiLCJwYXJlbnRJZCI6IjVmNzM0YzczIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo0MS41NTdaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMUhYOENxN05lRHBUMzh4dVpDa1hTeloiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9jb21wb25lbnRzL2Z1enp5LXNlbGVjdG9yLnRzIn19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMU5xWTVuUUhlaVdBRmtYUktDTlJzTDQiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9jb25maWctbG9hZGVyLnRzIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjE1MCwiY2FjaGVSZWFkIjoyMTU0OCwiY2FjaGVXcml0ZSI6MjY1OSwidG90YWxUb2tlbnMiOjI0MzU4LCJjb3N0Ijp7ImlucHV0IjowLjAwMDAwNSwib3V0cHV0IjowLjAwMzc1MDAwMDAwMDAwMDAwMDMsImNhY2hlUmVhZCI6MC4wMTA3NzM5OTk5OTk5OTk5OTksImNhY2hlV3JpdGUiOjAuMDE2NjE4NzUsInRvdGFsIjowLjAzMTE0Nzc1MDAwMDAwMDAwMn19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzIxNzc5Nn19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiNjQxM2FmMzgiLCJwYXJlbnRJZCI6IjM4MjcyMWJmIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo0MS41NjZaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMmRkOGQ4YTIiLCJwYXJlbnRJZCI6IjY0MTNhZjM4IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo0MS41ODVaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMUhYOENxN05lRHBUMzh4dVpDa1hTeloiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJpbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgU2V0dGluZ3NMaXN0VGhlbWUgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS10dWlcIjtcbmltcG9ydCB7XG4gIGZ1enp5RmlsdGVyLFxuICBJbnB1dCxcbiAgS2V5LFxuICBtYXRjaGVzS2V5LFxuICB0cnVuY2F0ZVRvV2lkdGgsXG4gIHZpc2libGVXaWR0aCxcbn0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI7XG5cbi8qKlxuICogQSBzdWJtZW51IGNvbXBvbmVudCBmb3Igc2VsZWN0aW5nIG9uZSBpdGVtIGZyb20gYSBsYXJnZSBsaXN0IHVzaW5nIGZ1enp5IHNlYXJjaC5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gVHlwZSB0byBmaWx0ZXIgaXRlbXMgdmlhIGZ1enp5IHNlYXJjaFxuICogLSBOYXZpZ2F0ZSB3aXRoIHVwL2Rvd24gYXJyb3dzXG4gKiAtIEVudGVyIHRvIHNlbGVjdFxuICogLSBFc2MgdG8gY2FuY2VsXG4gKiAtIFNob3dzIGhpZ2hsaWdodGVkIGl0ZW0gY2xlYXJseVxuICogLSBTY3JvbGxzIHdoZW4gaXRlbXMgZXhjZWVkIG1heFZpc2libGVcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1enp5U2VsZWN0b3JPcHRpb25zIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaXRlbXM6IHN0cmluZ1tdO1xuICBjdXJyZW50VmFsdWU/OiBzdHJpbmc7IC8vIHByZS1zZWxlY3QgdGhpcyBpdGVtIGlmIHByZXNlbnRcbiAgdGhlbWU6IFNldHRpbmdzTGlzdFRoZW1lO1xuICBvblNlbGVjdDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uRG9uZTogKCkgPT4gdm9pZDtcbiAgbWF4VmlzaWJsZT86IG51bWJlcjsgLy8gZGVmYXVsdCAxMFxufVxuXG5leHBvcnQgY2xhc3MgRnV6enlTZWxlY3RvciBpbXBsZW1lbnRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgYWxsSXRlbXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGZpbHRlcmVkSXRlbXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGxhYmVsOiBzdHJpbmc7XG4gIHByaXZhdGUgdGhlbWU6IFNldHRpbmdzTGlzdFRoZW1lO1xuICBwcml2YXRlIG9uU2VsZWN0OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvbkRvbmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgc2VsZWN0ZWRJbmRleCA9IDA7XG4gIHByaXZhdGUgbWF4VmlzaWJsZTogbnVtYmVyO1xuICBwcml2YXRlIGlucHV0OiBJbnB1dDtcbiAgcHJpdmF0ZSBxdWVyeSA9IFwiXCI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRnV6enlTZWxlY3Rvck9wdGlvbnMpIHtcbiAgICB0aGlzLmFsbEl0ZW1zID0gWy4uLm9wdGlvbnMuaXRlbXNdO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLmFsbEl0ZW1zXTtcbiAgICB0aGlzLmxhYmVsID0gb3B0aW9ucy5sYWJlbDtcbiAgICB0aGlzLnRoZW1lID0gb3B0aW9ucy50aGVtZTtcbiAgICB0aGlzLm9uU2VsZWN0ID0gb3B0aW9ucy5vblNlbGVjdDtcbiAgICB0aGlzLm9uRG9uZSA9IG9wdGlvbnMub25Eb25lO1xuICAgIHRoaXMubWF4VmlzaWJsZSA9IG9wdGlvbnMubWF4VmlzaWJsZSA/PyAxMDtcbiAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0KCk7XG5cbiAgICAvLyBQcmUtc2VsZWN0IGN1cnJlbnRWYWx1ZSBpZiBwcm92aWRlZCBhbmQgZXhpc3RzIGluIHRoZSBsaXN0XG4gICAgaWYgKG9wdGlvbnMuY3VycmVudFZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuYWxsSXRlbXMuaW5kZXhPZihvcHRpb25zLmN1cnJlbnRWYWx1ZSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5wdXQub25TdWJtaXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdEN1cnJlbnQoKTtcbiAgICB9O1xuICAgIHRoaXMuaW5wdXQub25Fc2NhcGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uRG9uZSgpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEN1cnJlbnQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZmlsdGVyZWRJdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5vblNlbGVjdChzZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXIoKSB7XG4gICAgdGhpcy5xdWVyeSA9IHRoaXMuaW5wdXQuZ2V0VmFsdWUoKTtcbiAgICBpZiAodGhpcy5xdWVyeS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLmFsbEl0ZW1zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gZnV6enlGaWx0ZXIoXG4gICAgICAgIHRoaXMuYWxsSXRlbXMsXG4gICAgICAgIHRoaXMucXVlcnksXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgY3Vyc29yIHRvIDAgd2hlbiBmaWx0ZXJpbmdcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICB9XG5cbiAgaW52YWxpZGF0ZSgpIHt9XG5cbiAgcmVuZGVyKHdpZHRoOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBIZWFkZXJcbiAgICBsaW5lcy5wdXNoKHRoaXMudGhlbWUubGFiZWwoYCAke3RoaXMubGFiZWx9YCwgdHJ1ZSkpO1xuICAgIGxpbmVzLnB1c2goXCJcIik7XG5cbiAgICAvLyBJbnB1dCBmaWVsZFxuICAgIGxpbmVzLnB1c2godGhpcy50aGVtZS5oaW50KFwiICBTZWFyY2g6XCIpKTtcbiAgICBsaW5lcy5wdXNoKGAgICR7dGhpcy5pbnB1dC5yZW5kZXIod2lkdGggLSA0KS5qb2luKFwiXCIpfWApO1xuICAgIGxpbmVzLnB1c2goXCJcIik7XG5cbiAgICAvLyBMaXN0IG9mIGZpbHRlcmVkIGl0ZW1zXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxpbmVzLnB1c2godGhpcy50aGVtZS5oaW50KFwiICAobm8gbWF0Y2hlcylcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCAtIE1hdGguZmxvb3IodGhpcy5tYXhWaXNpYmxlIC8gMiksXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIHRoaXMubWF4VmlzaWJsZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBzdGFydEluZGV4ICsgdGhpcy5tYXhWaXNpYmxlLFxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoLFxuICAgICAgKTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbHRlcmVkSXRlbXNbaV07XG4gICAgICAgIGlmICghaXRlbSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBpID09PSB0aGlzLnNlbGVjdGVkSW5kZXg7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGlzU2VsZWN0ZWQgPyB0aGlzLnRoZW1lLmN1cnNvciA6IFwiICBcIjtcbiAgICAgICAgY29uc3QgcHJlZml4V2lkdGggPSB2aXNpYmxlV2lkdGgocHJlZml4KTtcbiAgICAgICAgY29uc3QgbWF4SXRlbVdpZHRoID0gd2lkdGggLSBwcmVmaXhXaWR0aCAtIDI7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnRoZW1lLnZhbHVlKFxuICAgICAgICAgIHRydW5jYXRlVG9XaWR0aChpdGVtLCBtYXhJdGVtV2lkdGgsIFwiXCIpLFxuICAgICAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICAgICk7XG4gICAgICAgIGxpbmVzLnB1c2gocHJlZml4ICsgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgY291bnQgaW5kaWNhdG9yIHdoZW4gc2Nyb2xsaW5nXG4gICAgICBpZiAoc3RhcnRJbmRleCA+IDAgfHwgZW5kSW5kZXggPCB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgdGhpcy50aGVtZS5oaW50KFxuICAgICAgICAgICAgYCAgKCR7dGhpcy5zZWxlY3RlZEluZGV4ICsgMX0vJHt0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RofSlgLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcIlwiKTtcbiAgICBsaW5lcy5wdXNoKHRoaXMudGhlbWUuaGludChcIiAgVHlwZSB0byBzZWFyY2ggwrcgRW50ZXI6IHNlbGVjdCDCtyBFc2M6IGJhY2tcIikpO1xuXG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgaGFuZGxlSW5wdXQoZGF0YTogc3RyaW5nKSB7XG4gICAgLy8gTmF2aWdhdGlvbiBhbmQgc2VsZWN0aW9uXG4gICAgaWYgKG1hdGNoZXNLZXkoZGF0YSwgS2V5LnVwKSkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gMFxuICAgICAgICAgID8gdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDFcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJbmRleCAtIDE7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzS2V5KGRhdGEsIEtleS5kb3duKSkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDFcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJbmRleCArIDE7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzS2V5KGRhdGEsIEtleS5lc2NhcGUpKSB7XG4gICAgICB0aGlzLm9uRG9uZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0byBpbnB1dCBoYW5kbGVyXG4gICAgICB0aGlzLmlucHV0LmhhbmRsZUlucHV0KGRhdGEpO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXIoKTtcbiAgICB9XG4gIH1cbn1cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIyMTU2Nn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImI0NGY5NjNjIiwicGFyZW50SWQiOiIyZGQ4ZDhhMiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NDEuNTk1WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFOcVk1blFIZWlXQUZrWFJLQ05Sc0w0IiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiLyoqXG4gKiBHZW5lcmljIEpTT04gY29uZmlnIGxvYWRlciBmb3IgcGkgZXh0ZW5zaW9ucy5cbiAqXG4gKiBMb2FkcyBjb25maWcgZnJvbSBjb25maWd1cmFibGUgc2NvcGVzIChnbG9iYWwsIGxvY2FsLCBtZW1vcnkpLFxuICogZGVlcC1tZXJnZXMgd2l0aCBkZWZhdWx0cywgYW5kIG9wdGlvbmFsbHkgYXBwbGllcyB2ZXJzaW9uZWQgbWlncmF0aW9ucy5cbiAqXG4gKiBHbG9iYWw6ICB+Ly5waS9hZ2VudC9leHRlbnNpb25zL3tuYW1lfS5qc29uXG4gKiBMb2NhbDogICB7cHJvamVjdH0vLnBpL2V4dGVuc2lvbnMve25hbWV9Lmpzb24gKHdhbGtzIHVwIHRvIGZpbmQgLnBpKVxuICogTWVtb3J5OiAgSW4tbWVtb3J5IG9ubHksIG5vdCBwZXJzaXN0ZWQsIHJlc2V0cyBvbiByZWxvYWRcbiAqXG4gKiBNZXJnZSBwcmlvcml0eSAobG93ZXN0IHRvIGhpZ2hlc3QpOiBkZWZhdWx0cyAtPiBnbG9iYWwgLT4gbG9jYWwgLT4gbWVtb3J5XG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYywgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZ2V0QWdlbnREaXIgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcblxuLyoqXG4gKiBBdmFpbGFibGUgY29uZmlndXJhdGlvbiBzY29wZXMuXG4gKiAtIGdsb2JhbDogVXNlci13aWRlIHNldHRpbmdzIGluIH4vLnBpL2FnZW50L2V4dGVuc2lvbnMvXG4gKiAtIGxvY2FsOiBQcm9qZWN0LXNwZWNpZmljIHNldHRpbmdzIGluIHtwcm9qZWN0fS8ucGkvZXh0ZW5zaW9ucy9cbiAqIC0gbWVtb3J5OiBFcGhlbWVyYWwgc2V0dGluZ3MsIG5vdCBwZXJzaXN0ZWQsIHJlc2V0IG9uIHJlbG9hZFxuICovXG5leHBvcnQgdHlwZSBTY29wZSA9IFwiZ2xvYmFsXCIgfCBcImxvY2FsXCIgfCBcIm1lbW9yeVwiO1xuXG4vKipcbiAqIEEgbWlncmF0aW9uIHRoYXQgdHJhbnNmb3JtcyBhIGNvbmZpZyBmcm9tIG9uZSB2ZXJzaW9uIHRvIGFub3RoZXIuXG4gKiBNaWdyYXRpb25zIGFyZSBhcHBsaWVkIGluIG9yZGVyIGR1cmluZyBsb2FkKCkuIElmIGFueSBtaWdyYXRpb25cbiAqIHJldHVybnMgYSBtb2RpZmllZCBjb25maWcsIHRoZSByZXN1bHQgaXMgc2F2ZWQgYmFjayB0byBkaXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbjxUQ29uZmlnPiB7XG4gIC8qKiBOYW1lIGZvciBsb2dnaW5nIG9uIGZhaWx1cmUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFJldHVybiB0cnVlIGlmIHRoaXMgbWlncmF0aW9uIHNob3VsZCBydW4gb24gdGhlIGdpdmVuIGNvbmZpZy4gKi9cbiAgc2hvdWxkUnVuOiAoY29uZmlnOiBUQ29uZmlnKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVHJhbnNmb3JtIHRoZSBjb25maWcuIFJlY2VpdmVzIHRoZSBmaWxlIHBhdGggZm9yIGJhY2t1cC9sb2dnaW5nLlxuICAgKiBSZXR1cm4gdGhlIG1pZ3JhdGVkIGNvbmZpZy5cbiAgICovXG4gIHJ1bjogKGNvbmZpZzogVENvbmZpZywgZmlsZVBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxUQ29uZmlnPiB8IFRDb25maWc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBzZXR0aW5ncyBzdG9yYWdlLCB1c2VkIGJ5IHJlZ2lzdGVyU2V0dGluZ3NDb21tYW5kLlxuICogQ29uZmlnTG9hZGVyIGltcGxlbWVudHMgdGhpcy4gRXh0ZW5zaW9ucyB3aXRoIGN1c3RvbSBsb2FkZXJzIGNhblxuICogaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGRpcmVjdGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ1N0b3JlPFRDb25maWcgZXh0ZW5kcyBvYmplY3QsIFRSZXNvbHZlZCBleHRlbmRzIG9iamVjdD4ge1xuICBnZXRDb25maWcoKTogVFJlc29sdmVkO1xuICBnZXRSYXdDb25maWcoc2NvcGU6IFNjb3BlKTogVENvbmZpZyB8IG51bGw7XG4gIGhhc1Njb3BlKHNjb3BlOiBTY29wZSk6IGJvb2xlYW47XG4gIGhhc0NvbmZpZyhzY29wZTogU2NvcGUpOiBib29sZWFuO1xuICBnZXRFbmFibGVkU2NvcGVzKCk6IFNjb3BlW107XG4gIHNhdmUoc2NvcGU6IFNjb3BlLCBjb25maWc6IFRDb25maWcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIFdhbGsgdXAgZnJvbSBjd2QgdG8gZmluZCB0aGUgcHJvamVjdCByb290ICgucGkgZGlyZWN0b3J5KS5cbiAqIFN0b3BzIGF0IGhvbWUgZGlyZWN0b3J5LlxuICogUmV0dXJucyB0aGUgcGF0aCB0byAucGkvZXh0ZW5zaW9ucy97bmFtZX0uanNvbiwgb3IgbnVsbCBpZiBubyAucGkgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRMb2NhbENvbmZpZ1BhdGgoZXh0ZW5zaW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBob21lID0gaG9tZWRpcigpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcGlEaXIgPSByZXNvbHZlKGRpciwgXCIucGlcIik7XG4gICAgaWYgKGV4aXN0c1N5bmMocGlEaXIpICYmIHN0YXRTeW5jKHBpRGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShwaURpciwgYGV4dGVuc2lvbnMvJHtleHRlbnNpb25OYW1lfS5qc29uYCk7XG4gICAgfVxuXG4gICAgLy8gU3RvcCBhdCBob21lIGRpcmVjdG9yeVxuICAgIGlmIChkaXIgPT09IGhvbWUpIGJyZWFrO1xuXG4gICAgY29uc3QgcGFyZW50ID0gcmVzb2x2ZShkaXIsIFwiLi5cIik7XG4gICAgLy8gU3RvcCBpZiB3ZSBjYW4ndCBnbyBoaWdoZXJcbiAgICBpZiAocGFyZW50ID09PSBkaXIpIGJyZWFrO1xuICAgIGRpciA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uZmlnTG9hZGVyPFRDb25maWcgZXh0ZW5kcyBvYmplY3QsIFRSZXNvbHZlZCBleHRlbmRzIG9iamVjdD5cbiAgaW1wbGVtZW50cyBDb25maWdTdG9yZTxUQ29uZmlnLCBUUmVzb2x2ZWQ+XG57XG4gIHByaXZhdGUgZ2xvYmFsQ29uZmlnOiBUQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9jYWxDb25maWc6IFRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZW1vcnlDb25maWc6IFRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZXNvbHZlZDogVFJlc29sdmVkIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzY29wZXM6IFNjb3BlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFBhdGg6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdHM6IFRSZXNvbHZlZDtcbiAgcHJpdmF0ZSByZWFkb25seSBtaWdyYXRpb25zOiBNaWdyYXRpb248VENvbmZpZz5bXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhZnRlck1lcmdlPzogKFxuICAgIHJlc29sdmVkOiBUUmVzb2x2ZWQsXG4gICAgZ2xvYmFsOiBUQ29uZmlnIHwgbnVsbCxcbiAgICBsb2NhbDogVENvbmZpZyB8IG51bGwsXG4gICAgbWVtb3J5OiBUQ29uZmlnIHwgbnVsbCxcbiAgKSA9PiBUUmVzb2x2ZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZXh0ZW5zaW9uTmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHRzOiBUUmVzb2x2ZWQsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIC8qKlxuICAgICAgICogRW5hYmxlZCBzY29wZXMuIERlZmF1bHQ6IFtcImdsb2JhbFwiLCBcImxvY2FsXCJdXG4gICAgICAgKiBNZXJnZSBwcmlvcml0eSAobG93ZXN0IHRvIGhpZ2hlc3QpOiBkZWZhdWx0cyAtPiBnbG9iYWwgLT4gbG9jYWwgLT4gbWVtb3J5XG4gICAgICAgKi9cbiAgICAgIHNjb3Blcz86IFNjb3BlW107XG4gICAgICBtaWdyYXRpb25zPzogTWlncmF0aW9uPFRDb25maWc+W107XG4gICAgICAvKipcbiAgICAgICAqIFBvc3QtbWVyZ2UgaG9vay4gQ2FsbGVkIGFmdGVyIGRlZXAgbWVyZ2Ugd2l0aCBhbGwgcmF3IGNvbmZpZ3MuXG4gICAgICAgKiBVc2UgZm9yIGxvZ2ljIHRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIGFzIGEgc2ltcGxlIG1lcmdlXG4gICAgICAgKiAoZS5nLiwgb25lIGZpZWxkIHJlcGxhY2luZyBhbm90aGVyKS5cbiAgICAgICAqL1xuICAgICAgYWZ0ZXJNZXJnZT86IChcbiAgICAgICAgcmVzb2x2ZWQ6IFRSZXNvbHZlZCxcbiAgICAgICAgZ2xvYmFsOiBUQ29uZmlnIHwgbnVsbCxcbiAgICAgICAgbG9jYWw6IFRDb25maWcgfCBudWxsLFxuICAgICAgICBtZW1vcnk6IFRDb25maWcgfCBudWxsLFxuICAgICAgKSA9PiBUUmVzb2x2ZWQ7XG4gICAgfSxcbiAgKSB7XG4gICAgdGhpcy5zY29wZXMgPSBvcHRpb25zPy5zY29wZXMgPz8gW1wiZ2xvYmFsXCIsIFwibG9jYWxcIl07XG4gICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgIHRoaXMubWlncmF0aW9ucyA9IG9wdGlvbnM/Lm1pZ3JhdGlvbnMgPz8gW107XG4gICAgdGhpcy5hZnRlck1lcmdlID0gb3B0aW9ucz8uYWZ0ZXJNZXJnZTtcblxuICAgIC8vIFNldCB1cCBwYXRocyBiYXNlZCBvbiBlbmFibGVkIHNjb3Blc1xuICAgIHRoaXMuZ2xvYmFsUGF0aCA9IHRoaXMuc2NvcGVzLmluY2x1ZGVzKFwiZ2xvYmFsXCIpXG4gICAgICA/IHJlc29sdmUoZ2V0QWdlbnREaXIoKSwgYGV4dGVuc2lvbnMvJHtleHRlbnNpb25OYW1lfS5qc29uYClcbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMubG9jYWxQYXRoID0gdGhpcy5zY29wZXMuaW5jbHVkZXMoXCJsb2NhbFwiKVxuICAgICAgPyBmaW5kTG9jYWxDb25maWdQYXRoKGV4dGVuc2lvbk5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCAob3IgcmVsb2FkKSBjb25maWcgZnJvbSBkaXNrLiBBcHBsaWVzIG1pZ3JhdGlvbnMgaWYgbmVlZGVkLlxuICAgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZ2V0Q29uZmlnKCkgb3IgZ2V0UmF3Q29uZmlnKCkuXG4gICAqXG4gICAqIE5vdGU6IE1lbW9yeSBjb25maWcgaXMgcmVzZXQgdG8gbnVsbCBvbiByZWxvYWQgKGVwaGVtZXJhbCkuXG4gICAqL1xuICBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIExvYWQgZnJvbSBkaXNrXG4gICAgdGhpcy5nbG9iYWxDb25maWcgPSB0aGlzLmdsb2JhbFBhdGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkRmlsZSh0aGlzLmdsb2JhbFBhdGgpXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5sb2NhbENvbmZpZyA9IHRoaXMubG9jYWxQYXRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZEZpbGUodGhpcy5sb2NhbFBhdGgpXG4gICAgICA6IG51bGw7XG5cbiAgICAvLyBSZXNldCBtZW1vcnkgb24gcmVsb2FkIChlcGhlbWVyYWwpXG4gICAgdGhpcy5tZW1vcnlDb25maWcgPSBudWxsO1xuXG4gICAgLy8gQXBwbHkgbWlncmF0aW9ucyB0byBkaXNrIGNvbmZpZ3NcbiAgICBpZiAodGhpcy5nbG9iYWxDb25maWcgJiYgdGhpcy5nbG9iYWxQYXRoKSB7XG4gICAgICB0aGlzLmdsb2JhbENvbmZpZyA9IGF3YWl0IHRoaXMuYXBwbHlNaWdyYXRpb25zKFxuICAgICAgICB0aGlzLmdsb2JhbENvbmZpZyxcbiAgICAgICAgdGhpcy5nbG9iYWxQYXRoLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9jYWxDb25maWcgJiYgdGhpcy5sb2NhbFBhdGgpIHtcbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCB0aGlzLmFwcGx5TWlncmF0aW9ucyhcbiAgICAgICAgdGhpcy5sb2NhbENvbmZpZyxcbiAgICAgICAgdGhpcy5sb2NhbFBhdGgsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucmVzb2x2ZWQgPSB0aGlzLm1lcmdlKCk7XG4gIH1cblxuICBnZXRDb25maWcoKTogVFJlc29sdmVkIHtcbiAgICBpZiAoIXRoaXMucmVzb2x2ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZyBub3QgbG9hZGVkLiBDYWxsIGxvYWQoKSBmaXJzdC5cIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVkO1xuICB9XG5cbiAgZ2V0UmF3Q29uZmlnKHNjb3BlOiBTY29wZSk6IFRDb25maWcgfCBudWxsIHtcbiAgICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgICBjYXNlIFwiZ2xvYmFsXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbENvbmZpZztcbiAgICAgIGNhc2UgXCJsb2NhbFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbENvbmZpZztcbiAgICAgIGNhc2UgXCJtZW1vcnlcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMubWVtb3J5Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGhhc1Njb3BlKHNjb3BlOiBTY29wZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNjb3Blcy5pbmNsdWRlcyhzY29wZSk7XG4gIH1cblxuICBoYXNDb25maWcoc2NvcGU6IFNjb3BlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc1Njb3BlKHNjb3BlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmdldFJhd0NvbmZpZyhzY29wZSkgIT09IG51bGw7XG4gIH1cblxuICBnZXRFbmFibGVkU2NvcGVzKCk6IFNjb3BlW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5zY29wZXNdO1xuICB9XG5cbiAgLyoqIFNhdmUgY29uZmlnIGFuZCByZWxvYWQgc3RhdGUgKGV4Y2VwdCBtZW1vcnkgd2hpY2gganVzdCB1cGRhdGVzIGluIHBsYWNlKS4gKi9cbiAgYXN5bmMgc2F2ZShzY29wZTogU2NvcGUsIGNvbmZpZzogVENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5oYXNTY29wZShzY29wZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NvcGUgXCIke3Njb3BlfVwiIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlID09PSBcIm1lbW9yeVwiKSB7XG4gICAgICAvLyBNZW1vcnkgaXMgZXBoZW1lcmFsLCBqdXN0IHN0b3JlIGluIHBsYWNlIGFuZCByZS1tZXJnZVxuICAgICAgdGhpcy5tZW1vcnlDb25maWcgPSBjb25maWc7XG4gICAgICB0aGlzLnJlc29sdmVkID0gdGhpcy5tZXJnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBzY29wZSA9PT0gXCJnbG9iYWxcIiA/IHRoaXMuZ2xvYmFsUGF0aCA6IHRoaXMubG9jYWxQYXRoO1xuICAgIGlmICghcGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwYXRoIGNvbmZpZ3VyZWQgZm9yIHNjb3BlIFwiJHtzY29wZX1cImApO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMud3JpdGVGaWxlKHBhdGgsIGNvbmZpZyk7XG5cbiAgICAvLyBSZWxvYWQgZGlzayBjb25maWdzIGJ1dCBwcmVzZXJ2ZSBtZW1vcnlcbiAgICBjb25zdCBzYXZlZE1lbW9yeSA9IHRoaXMubWVtb3J5Q29uZmlnO1xuICAgIHRoaXMuZ2xvYmFsQ29uZmlnID0gdGhpcy5nbG9iYWxQYXRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZEZpbGUodGhpcy5nbG9iYWxQYXRoKVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMubG9jYWxDb25maWcgPSB0aGlzLmxvY2FsUGF0aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRGaWxlKHRoaXMubG9jYWxQYXRoKVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMubWVtb3J5Q29uZmlnID0gc2F2ZWRNZW1vcnk7XG4gICAgdGhpcy5yZXNvbHZlZCA9IHRoaXMubWVyZ2UoKTtcbiAgfVxuXG4gIC8vIC0tLSBJbnRlcm5hbCAtLS1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5TWlncmF0aW9ucyhcbiAgICBjb25maWc6IFRDb25maWcsXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxUQ29uZmlnPiB7XG4gICAgbGV0IGN1cnJlbnQgPSBjb25maWc7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgbWlncmF0aW9uIG9mIHRoaXMubWlncmF0aW9ucykge1xuICAgICAgaWYgKCFtaWdyYXRpb24uc2hvdWxkUnVuKGN1cnJlbnQpKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnQgPSBhd2FpdCBtaWdyYXRpb24ucnVuKGN1cnJlbnQsIGZpbGVQYXRoKTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbc2V0dGluZ3NdIE1pZ3JhdGlvbiBcIiR7bWlncmF0aW9uLm5hbWV9XCIgZmFpbGVkIGZvciAke2ZpbGVQYXRofTogJHtlcnJvcn1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLndyaXRlRmlsZShmaWxlUGF0aCwgY3VycmVudCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2F2ZSBmYWlsZWQgLSB1c2UgbWlncmF0ZWQgdmVyc2lvbiBpbiBtZW1vcnkgb25seS5cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2UoKTogVFJlc29sdmVkIHtcbiAgICBjb25zdCBtZXJnZWQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5kZWZhdWx0cyk7XG5cbiAgICAvLyBNZXJnZSBpbiBwcmlvcml0eSBvcmRlcjogZ2xvYmFsIC0+IGxvY2FsIC0+IG1lbW9yeVxuICAgIGlmICh0aGlzLmdsb2JhbENvbmZpZykgdGhpcy5kZWVwTWVyZ2UobWVyZ2VkLCB0aGlzLmdsb2JhbENvbmZpZyk7XG4gICAgaWYgKHRoaXMubG9jYWxDb25maWcpIHRoaXMuZGVlcE1lcmdlKG1lcmdlZCwgdGhpcy5sb2NhbENvbmZpZyk7XG4gICAgaWYgKHRoaXMubWVtb3J5Q29uZmlnKSB0aGlzLmRlZXBNZXJnZShtZXJnZWQsIHRoaXMubWVtb3J5Q29uZmlnKTtcblxuICAgIGlmICh0aGlzLmFmdGVyTWVyZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmFmdGVyTWVyZ2UoXG4gICAgICAgIG1lcmdlZCxcbiAgICAgICAgdGhpcy5nbG9iYWxDb25maWcsXG4gICAgICAgIHRoaXMubG9jYWxDb25maWcsXG4gICAgICAgIHRoaXMubWVtb3J5Q29uZmlnLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcE1lcmdlKHRhcmdldDogb2JqZWN0LCBzb3VyY2U6IG9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHQgPSB0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcyA9IHNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzKSB7XG4gICAgICBpZiAoc1trZXldID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygc1trZXldID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KHNba2V5XSkgJiZcbiAgICAgICAgc1trZXldICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgaWYgKCF0W2tleV0gfHwgdHlwZW9mIHRba2V5XSAhPT0gXCJvYmplY3RcIikgdFtrZXldID0ge307XG4gICAgICAgIHRoaXMuZGVlcE1lcmdlKHRba2V5XSBhcyBvYmplY3QsIHNba2V5XSBhcyBvYmplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdFtrZXldID0gc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxUQ29uZmlnIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUocGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIFRDb25maWc7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbmZpZzogVENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBgJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfVxcbmAsIFwidXRmLThcIik7XG4gIH1cbn1cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIyMTU4OX19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKGJhc2gpIn0sImlkIjoiYWIwMDIyOTUiLCJwYXJlbnRJZCI6ImI0NGY5NjNjIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo0Ni4wODNaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZDdkMmE2YWQiLCJwYXJlbnRJZCI6ImFiMDAyMjk1IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo0Ni4wODNaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiTm93IGxldCBtZSBsb29rIGF0IGFuIGV4aXN0aW5nIGV4dGVuc2lvbiB0aGF0IHVzZXMgdGhlIHNldHRpbmdzIHBhY2thZ2UgZm9yIHBhdHRlcm5zOiJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMVJDdDh3czd6UUZpNDZyM29SN3BRS2IiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZ3JlcCAtcmwgXCJwaS11dGlscy1zZXR0aW5nc1xcfHJlZ2lzdGVyU2V0dGluZ3NDb21tYW5kXCIgL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zLyAtLWluY2x1ZGU9XCIqLnRzXCIgfCBoZWFkIC0xMCJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0IjoxMjAsImNhY2hlUmVhZCI6MjQyMDcsImNhY2hlV3JpdGUiOjQ1MzUsInRvdGFsVG9rZW5zIjoyODg2MywiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDMsImNhY2hlUmVhZCI6MC4wMTIxMDM1LCJjYWNoZVdyaXRlIjowLjAyODM0Mzc1LCJ0b3RhbCI6MC4wNDM0NTIyNX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzIyMTU5NX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImUwMGY0Yjk5IiwicGFyZW50SWQiOiJkN2QyYTZhZCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NDYuMTY0WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFSQ3Q4d3M3elFGaTQ2cjNvUjdwUUtiIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL3N1YmFnZW50cy9jb21tYW5kcy9zZXR0aW5ncy1jb21tYW5kLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvc3ViYWdlbnRzL2NvbmZpZy50c1xuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL2d1YXJkcmFpbHMvY29tbWFuZHMvc2V0dGluZ3MtY29tbWFuZC50c1xuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL2d1YXJkcmFpbHMvY29uZmlnLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvcHJvY2Vzc2VzL2NvbW1hbmRzL3NldHRpbmdzLWNvbW1hbmQudHNcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvZXh0ZW5zaW9ucy9wcm9jZXNzZXMvY29uZmlnLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvcHJvdmlkZXJzL2NvbW1hbmRzL3NldHRpbmdzLWNvbW1hbmQudHNcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvZXh0ZW5zaW9ucy9wcm92aWRlcnMvY29uZmlnLnRzXG4vVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvcGxhbm5pbmcvbGliL2NvbmZpZy50c1xuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL2RlZmF1bHRzL2NvbW1hbmRzL3NldHRpbmdzLnRzXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcyMjYxNjR9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6ImVlNWE5MWQ0IiwicGFyZW50SWQiOiJlMDBmNGI5OSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NDkuOTQ3WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImU3YzE5M2U4IiwicGFyZW50SWQiOiJlZTVhOTFkNCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NDkuOTQ3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFBRUNXS3JpekJBRks5YnllM0tDV0ZtIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvZXh0ZW5zaW9ucy9ndWFyZHJhaWxzL2NvbmZpZy50cyJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFHcURBNDVQTVc0aFR0MVU5WEFZdkpIIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvZXh0ZW5zaW9ucy9ndWFyZHJhaWxzL2NvbW1hbmRzL3NldHRpbmdzLWNvbW1hbmQudHMifX1dLCJhcGkiOiJhbnRocm9waWMtbWVzc2FnZXMiLCJwcm92aWRlciI6ImFudGhyb3BpYyIsIm1vZGVsIjoiY2xhdWRlLW9wdXMtNC02IiwidXNhZ2UiOnsiaW5wdXQiOjEsIm91dHB1dCI6MTUxLCJjYWNoZVJlYWQiOjI4NzQyLCJjYWNoZVdyaXRlIjo0NjksInRvdGFsVG9rZW5zIjoyOTM2MywiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDM3NzUsImNhY2hlUmVhZCI6MC4wMTQzNzEsImNhY2hlV3JpdGUiOjAuMDAyOTMxMjUwMDAwMDAwMDAwMywidG90YWwiOjAuMDIxMDgyMjV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDcyMjYxNjR9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6IjgxYzM1MzgyIiwicGFyZW50SWQiOiJlN2MxOTNlOCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NDkuOTUwWiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjIwNzMwN2Q3IiwicGFyZW50SWQiOiI4MWMzNTM4MiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NDkuOTU5WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFBRUNXS3JpekJBRks5YnllM0tDV0ZtIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiLyoqXG4gKiBDb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgdGhlIGd1YXJkcmFpbHMgZXh0ZW5zaW9uLlxuICpcbiAqIEd1YXJkcmFpbHNDb25maWcgaXMgdGhlIHVzZXItZmFjaW5nIHNjaGVtYSAoYWxsIGZpZWxkcyBvcHRpb25hbCkuXG4gKiBSZXNvbHZlZENvbmZpZyBpcyB0aGUgaW50ZXJuYWwgc2NoZW1hIChhbGwgZmllbGRzIHJlcXVpcmVkLCBkZWZhdWx0cyBhcHBsaWVkKS5cbiAqL1xuXG4vKipcbiAqIEEgcGF0dGVybiB3aXRoIGV4cGxpY2l0IG1hdGNoaW5nIG1vZGUuXG4gKiBEZWZhdWx0OiBnbG9iIGZvciBmaWxlcywgc3Vic3RyaW5nIGZvciBjb21tYW5kcy5cbiAqIHJlZ2V4OiB0cnVlIG1lYW5zIGZ1bGwgcmVnZXggbWF0Y2hpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVybkNvbmZpZyB7XG4gIHBhdHRlcm46IHN0cmluZztcbiAgcmVnZXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlcm1pc3Npb24gZ2F0ZSBwYXR0ZXJuLiBXaGVuIHJlZ2V4IGlzIGZhbHNlIChkZWZhdWx0KSwgdGhlIHBhdHRlcm5cbiAqIGlzIG1hdGNoZWQgYXMgc3Vic3RyaW5nIGFnYWluc3QgdGhlIHJhdyBjb21tYW5kIHN0cmluZy5cbiAqIFdoZW4gcmVnZXggaXMgdHJ1ZSwgdXNlcyBmdWxsIHJlZ2V4IGFnYWluc3QgdGhlIHJhdyBzdHJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFuZ2Vyb3VzUGF0dGVybiBleHRlbmRzIFBhdHRlcm5Db25maWcge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEd1YXJkcmFpbHNDb25maWcge1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBlbmFibGVkPzogYm9vbGVhbjtcbiAgZmVhdHVyZXM/OiB7XG4gICAgcHJvdGVjdEVudkZpbGVzPzogYm9vbGVhbjtcbiAgICBwZXJtaXNzaW9uR2F0ZT86IGJvb2xlYW47XG4gIH07XG4gIGVudkZpbGVzPzoge1xuICAgIHByb3RlY3RlZFBhdHRlcm5zPzogUGF0dGVybkNvbmZpZ1tdO1xuICAgIGFsbG93ZWRQYXR0ZXJucz86IFBhdHRlcm5Db25maWdbXTtcbiAgICBwcm90ZWN0ZWREaXJlY3Rvcmllcz86IFBhdHRlcm5Db25maWdbXTtcbiAgICBwcm90ZWN0ZWRUb29scz86IHN0cmluZ1tdO1xuICAgIG9ubHlCbG9ja0lmRXhpc3RzPzogYm9vbGVhbjtcbiAgICBibG9ja01lc3NhZ2U/OiBzdHJpbmc7XG4gIH07XG4gIHBlcm1pc3Npb25HYXRlPzoge1xuICAgIHBhdHRlcm5zPzogRGFuZ2Vyb3VzUGF0dGVybltdO1xuICAgIC8qKiBJZiBzZXQsIHJlcGxhY2VzIHRoZSBkZWZhdWx0IHBhdHRlcm5zIGVudGlyZWx5LiAqL1xuICAgIGN1c3RvbVBhdHRlcm5zPzogRGFuZ2Vyb3VzUGF0dGVybltdO1xuICAgIHJlcXVpcmVDb25maXJtYXRpb24/OiBib29sZWFuO1xuICAgIGFsbG93ZWRQYXR0ZXJucz86IFBhdHRlcm5Db25maWdbXTtcbiAgICBhdXRvRGVueVBhdHRlcm5zPzogUGF0dGVybkNvbmZpZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkQ29uZmlnIHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBmZWF0dXJlczoge1xuICAgIHByb3RlY3RFbnZGaWxlczogYm9vbGVhbjtcbiAgICBwZXJtaXNzaW9uR2F0ZTogYm9vbGVhbjtcbiAgfTtcbiAgZW52RmlsZXM6IHtcbiAgICBwcm90ZWN0ZWRQYXR0ZXJuczogUGF0dGVybkNvbmZpZ1tdO1xuICAgIGFsbG93ZWRQYXR0ZXJuczogUGF0dGVybkNvbmZpZ1tdO1xuICAgIHByb3RlY3RlZERpcmVjdG9yaWVzOiBQYXR0ZXJuQ29uZmlnW107XG4gICAgcHJvdGVjdGVkVG9vbHM6IHN0cmluZ1tdO1xuICAgIG9ubHlCbG9ja0lmRXhpc3RzOiBib29sZWFuO1xuICAgIGJsb2NrTWVzc2FnZTogc3RyaW5nO1xuICB9O1xuICBwZXJtaXNzaW9uR2F0ZToge1xuICAgIHBhdHRlcm5zOiBEYW5nZXJvdXNQYXR0ZXJuW107XG4gICAgLyoqIFdoZW4gdHJ1ZSwgdXNlIGhhcmRjb2RlZCBzdHJ1Y3R1cmFsIG1hdGNoZXJzIGZvciBidWlsdC1pbiBwYXR0ZXJucy5cbiAgICAgKiAgU2V0IHRvIGZhbHNlIHdoZW4gY3VzdG9tUGF0dGVybnMgcmVwbGFjZXMgdGhlIGRlZmF1bHRzLiAqL1xuICAgIHVzZUJ1aWx0aW5NYXRjaGVyczogYm9vbGVhbjtcbiAgICByZXF1aXJlQ29uZmlybWF0aW9uOiBib29sZWFuO1xuICAgIGFsbG93ZWRQYXR0ZXJuczogUGF0dGVybkNvbmZpZ1tdO1xuICAgIGF1dG9EZW55UGF0dGVybnM6IFBhdHRlcm5Db25maWdbXTtcbiAgfTtcbn1cblxuaW1wb3J0IHsgQ29uZmlnTG9hZGVyLCB0eXBlIE1pZ3JhdGlvbiB9IGZyb20gXCJAYWxpb3UvcGktdXRpbHMtc2V0dGluZ3NcIjtcbmltcG9ydCB7XG4gIGJhY2t1cENvbmZpZyxcbiAgQ1VSUkVOVF9WRVJTSU9OLFxuICBtaWdyYXRlVjAsXG4gIG5lZWRzTWlncmF0aW9uLFxufSBmcm9tIFwiLi91dGlscy9taWdyYXRpb25cIjtcblxuLyoqXG4gKiBDb25maWcgZmllbGRzIHJlbW92ZWQgaW4gdGhlIHRvb2xjaGFpbiBleHRyYWN0aW9uLlxuICogT2xkIGNvbmZpZ3MgY29udGFpbmluZyB0aGVzZSBhcmUgYXV0by1jbGVhbmVkIG9uIGZpcnN0IGxvYWQuXG4gKi9cbmNvbnN0IFJFTU9WRURfRkVBVFVSRV9LRVlTID0gW1xuICBcInByZXZlbnRCcmV3XCIsXG4gIFwicHJldmVudFB5dGhvblwiLFxuICBcImVuZm9yY2VQYWNrYWdlTWFuYWdlclwiLFxuXSBhcyBjb25zdDtcblxuY29uc3QgVE9PTENIQUlOX01JR1JBVElPTl9WRVJTSU9OID0gXCIwLjcuMC0yMDI2MDIwNFwiO1xuXG5mdW5jdGlvbiBoYXNSZW1vdmVkRmllbGRzKGNvbmZpZzogR3VhcmRyYWlsc0NvbmZpZyk6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSBjb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGZlYXR1cmVzID0gcmF3LmZlYXR1cmVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAoZmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSRU1PVkVEX0ZFQVRVUkVfS0VZUykge1xuICAgICAgaWYgKGtleSBpbiBmZWF0dXJlcykgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBcInBhY2thZ2VNYW5hZ2VyXCIgaW4gcmF3O1xufVxuXG5mdW5jdGlvbiBzdHJpcFJlbW92ZWRGaWVsZHMoY29uZmlnOiBHdWFyZHJhaWxzQ29uZmlnKTogR3VhcmRyYWlsc0NvbmZpZyB7XG4gIGNvbnN0IGNsZWFuZWQgPSBzdHJ1Y3R1cmVkQ2xvbmUoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgZmVhdHVyZXMgPSBjbGVhbmVkLmZlYXR1cmVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAoZmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSRU1PVkVEX0ZFQVRVUkVfS0VZUykge1xuICAgICAgZGVsZXRlIGZlYXR1cmVzW2tleV07XG4gICAgfVxuICB9XG4gIGRlbGV0ZSBjbGVhbmVkLnBhY2thZ2VNYW5hZ2VyO1xuICBjbGVhbmVkLnZlcnNpb24gPSBUT09MQ0hBSU5fTUlHUkFUSU9OX1ZFUlNJT047XG4gIHJldHVybiBjbGVhbmVkIGFzIEd1YXJkcmFpbHNDb25maWc7XG59XG5cbmNvbnN0IG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbjxHdWFyZHJhaWxzQ29uZmlnPltdID0gW1xuICB7XG4gICAgbmFtZTogXCJ2MC1mb3JtYXQtdXBncmFkZVwiLFxuICAgIHNob3VsZFJ1bjogKGNvbmZpZykgPT4gbmVlZHNNaWdyYXRpb24oY29uZmlnKSxcbiAgICBydW46IGFzeW5jIChjb25maWcsIGZpbGVQYXRoKSA9PiB7XG4gICAgICBhd2FpdCBiYWNrdXBDb25maWcoZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIG1pZ3JhdGVWMChjb25maWcpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInN0cmlwLXRvb2xjaGFpbi1maWVsZHNcIixcbiAgICBzaG91bGRSdW46IChjb25maWcpID0+IGhhc1JlbW92ZWRGaWVsZHMoY29uZmlnKSxcbiAgICBydW46IChjb25maWcpID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSAoY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS52ZXJzaW9uIGFzXG4gICAgICAgIHwgc3RyaW5nXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCF2ZXJzaW9uIHx8IHZlcnNpb24gPCBUT09MQ0hBSU5fTUlHUkFUSU9OX1ZFUlNJT04pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIltndWFyZHJhaWxzXSBwcmV2ZW50QnJldywgcHJldmVudFB5dGhvbiwgZW5mb3JjZVBhY2thZ2VNYW5hZ2VyLCBhbmQgcGFja2FnZU1hbmFnZXIgXCIgK1xuICAgICAgICAgICAgXCJoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGd1YXJkcmFpbHMgYW5kIG1vdmVkIHRvIEBhbGlvdS9waS10b29sY2hhaW4uIFwiICtcbiAgICAgICAgICAgIFwiVGhlc2UgZmllbGRzIHdpbGwgYmUgc3RyaXBwZWQgZnJvbSB5b3VyIGNvbmZpZy5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpcFJlbW92ZWRGaWVsZHMoY29uZmlnKTtcbiAgICB9LFxuICB9LFxuXTtcblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFJlc29sdmVkQ29uZmlnID0ge1xuICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gIGVuYWJsZWQ6IHRydWUsXG4gIGZlYXR1cmVzOiB7XG4gICAgcHJvdGVjdEVudkZpbGVzOiB0cnVlLFxuICAgIHBlcm1pc3Npb25HYXRlOiB0cnVlLFxuICB9LFxuICBlbnZGaWxlczoge1xuICAgIHByb3RlY3RlZFBhdHRlcm5zOiBbXG4gICAgICB7IHBhdHRlcm46IFwiLmVudlwiIH0sXG4gICAgICB7IHBhdHRlcm46IFwiLmVudi5sb2NhbFwiIH0sXG4gICAgICB7IHBhdHRlcm46IFwiLmVudi5wcm9kdWN0aW9uXCIgfSxcbiAgICAgIHsgcGF0dGVybjogXCIuZW52LnByb2RcIiB9LFxuICAgICAgeyBwYXR0ZXJuOiBcIi5kZXYudmFyc1wiIH0sXG4gICAgXSxcbiAgICBhbGxvd2VkUGF0dGVybnM6IFtcbiAgICAgIHsgcGF0dGVybjogXCIqLmV4YW1wbGUuZW52XCIgfSxcbiAgICAgIHsgcGF0dGVybjogXCIqLnNhbXBsZS5lbnZcIiB9LFxuICAgICAgeyBwYXR0ZXJuOiBcIioudGVzdC5lbnZcIiB9LFxuICAgICAgeyBwYXR0ZXJuOiBcIi5lbnYuZXhhbXBsZVwiIH0sXG4gICAgICB7IHBhdHRlcm46IFwiLmVudi5zYW1wbGVcIiB9LFxuICAgICAgeyBwYXR0ZXJuOiBcIi5lbnYudGVzdFwiIH0sXG4gICAgXSxcbiAgICBwcm90ZWN0ZWREaXJlY3RvcmllczogW10sXG4gICAgcHJvdGVjdGVkVG9vbHM6IFtcInJlYWRcIiwgXCJ3cml0ZVwiLCBcImVkaXRcIiwgXCJiYXNoXCIsIFwiZ3JlcFwiLCBcImZpbmRcIiwgXCJsc1wiXSxcbiAgICBvbmx5QmxvY2tJZkV4aXN0czogdHJ1ZSxcbiAgICBibG9ja01lc3NhZ2U6XG4gICAgICBcIkFjY2Vzc2luZyB7ZmlsZX0gaXMgbm90IGFsbG93ZWQuIEVudmlyb25tZW50IGZpbGVzIGNvbnRhaW5pbmcgc2VjcmV0cyBhcmUgcHJvdGVjdGVkLiBcIiArXG4gICAgICBcIkV4cGxhaW4gdG8gdGhlIHVzZXIgd2h5IHlvdSB3YW50IHRvIGFjY2VzcyB0aGlzIC5lbnYgZmlsZSwgYW5kIGlmIGNoYW5nZXMgYXJlIG5lZWRlZCBhc2sgdGhlIHVzZXIgdG8gbWFrZSB0aGVtLiBcIiArXG4gICAgICBcIk9ubHkgLmVudi5leGFtcGxlLCAuZW52LnNhbXBsZSwgb3IgLmVudi50ZXN0IGZpbGVzIGNhbiBiZSBhY2Nlc3NlZC5cIixcbiAgfSxcbiAgcGVybWlzc2lvbkdhdGU6IHtcbiAgICBwYXR0ZXJuczogW1xuICAgICAgeyBwYXR0ZXJuOiBcInJtIC1yZlwiLCBkZXNjcmlwdGlvbjogXCJyZWN1cnNpdmUgZm9yY2UgZGVsZXRlXCIgfSxcbiAgICAgIHsgcGF0dGVybjogXCJzdWRvXCIsIGRlc2NyaXB0aW9uOiBcInN1cGVydXNlciBjb21tYW5kXCIgfSxcbiAgICAgIHsgcGF0dGVybjogXCJkZCBpZj1cIiwgZGVzY3JpcHRpb246IFwiZGlzayB3cml0ZSBvcGVyYXRpb25cIiB9LFxuICAgICAgeyBwYXR0ZXJuOiBcIm1rZnMuXCIsIGRlc2NyaXB0aW9uOiBcImZpbGVzeXN0ZW0gZm9ybWF0XCIgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0dGVybjogXCJjaG1vZCAtUiA3NzdcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiaW5zZWN1cmUgcmVjdXJzaXZlIHBlcm1pc3Npb25zXCIsXG4gICAgICB9LFxuICAgICAgeyBwYXR0ZXJuOiBcImNob3duIC1SXCIsIGRlc2NyaXB0aW9uOiBcInJlY3Vyc2l2ZSBvd25lcnNoaXAgY2hhbmdlXCIgfSxcbiAgICBdLFxuICAgIHVzZUJ1aWx0aW5NYXRjaGVyczogdHJ1ZSxcbiAgICByZXF1aXJlQ29uZmlybWF0aW9uOiB0cnVlLFxuICAgIGFsbG93ZWRQYXR0ZXJuczogW10sXG4gICAgYXV0b0RlbnlQYXR0ZXJuczogW10sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY29uZmlnTG9hZGVyID0gbmV3IENvbmZpZ0xvYWRlcjxHdWFyZHJhaWxzQ29uZmlnLCBSZXNvbHZlZENvbmZpZz4oXG4gIFwiZ3VhcmRyYWlsc1wiLFxuICBERUZBVUxUX0NPTkZJRyxcbiAge1xuICAgIHNjb3BlczogW1wiZ2xvYmFsXCIsIFwibG9jYWxcIiwgXCJtZW1vcnlcIl0sXG4gICAgbWlncmF0aW9ucyxcbiAgICBhZnRlck1lcmdlOiAocmVzb2x2ZWQsIGdsb2JhbCwgbG9jYWwsIG1lbW9yeSkgPT4ge1xuICAgICAgLy8gY3VzdG9tUGF0dGVybnMgcmVwbGFjZXMgdGhlIGVudGlyZSBwYXR0ZXJucyBhcnJheSBhbmQgZGlzYWJsZXNcbiAgICAgIC8vIGJ1aWx0LWluIHN0cnVjdHVyYWwgbWF0Y2hlcnMgKHVzZXIgb3ducyBhbGwgbWF0Y2hpbmcpLlxuICAgICAgLy8gUHJpb3JpdHk6IG1lbW9yeSA+IGxvY2FsID4gZ2xvYmFsXG4gICAgICBjb25zdCBjdXN0b21QYXR0ZXJucyA9XG4gICAgICAgIG1lbW9yeT8ucGVybWlzc2lvbkdhdGU/LmN1c3RvbVBhdHRlcm5zID8/XG4gICAgICAgIGxvY2FsPy5wZXJtaXNzaW9uR2F0ZT8uY3VzdG9tUGF0dGVybnMgPz9cbiAgICAgICAgZ2xvYmFsPy5wZXJtaXNzaW9uR2F0ZT8uY3VzdG9tUGF0dGVybnM7XG4gICAgICBpZiAoY3VzdG9tUGF0dGVybnMpIHtcbiAgICAgICAgcmVzb2x2ZWQucGVybWlzc2lvbkdhdGUucGF0dGVybnMgPSBjdXN0b21QYXR0ZXJucztcbiAgICAgICAgcmVzb2x2ZWQucGVybWlzc2lvbkdhdGUudXNlQnVpbHRpbk1hdGNoZXJzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgfSxcbiAgfSxcbik7XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcyMjk5NTB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4MjBkNDA2YSIsInBhcmVudElkIjoiMjA3MzA3ZDciLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjQ5Ljk3NFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxR3FEQTQ1UE1XNGhUdDFVOVhBWXZKSCIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImltcG9ydCB7XG4gIEFycmF5RWRpdG9yLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgcmVnaXN0ZXJTZXR0aW5nc0NvbW1hbmQsXG4gIHR5cGUgU2V0dGluZ3NTZWN0aW9uLFxuICBzZXROZXN0ZWRWYWx1ZSxcbn0gZnJvbSBcIkBhbGlvdS9waS11dGlscy1zZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25BUEkgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcbmltcG9ydCB7IGdldFNldHRpbmdzTGlzdFRoZW1lIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI7XG5pbXBvcnQgeyBQYXR0ZXJuRWRpdG9yIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcGF0dGVybi1lZGl0b3JcIjtcbmltcG9ydCB0eXBlIHtcbiAgRGFuZ2Vyb3VzUGF0dGVybixcbiAgR3VhcmRyYWlsc0NvbmZpZyxcbiAgUGF0dGVybkNvbmZpZyxcbiAgUmVzb2x2ZWRDb25maWcsXG59IGZyb20gXCIuLi9jb25maWdcIjtcbmltcG9ydCB7IGNvbmZpZ0xvYWRlciB9IGZyb20gXCIuLi9jb25maWdcIjtcblxudHlwZSBGZWF0dXJlS2V5ID0ga2V5b2YgUmVzb2x2ZWRDb25maWdbXCJmZWF0dXJlc1wiXTtcblxuY29uc3QgRkVBVFVSRV9VSTogUmVjb3JkPEZlYXR1cmVLZXksIHsgbGFiZWw6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IHtcbiAgcHJvdGVjdEVudkZpbGVzOiB7XG4gICAgbGFiZWw6IFwiUHJvdGVjdCAuZW52IGZpbGVzXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQmxvY2sgYWNjZXNzIHRvIC5lbnYgZmlsZXMgY29udGFpbmluZyBzZWNyZXRzXCIsXG4gIH0sXG4gIHBlcm1pc3Npb25HYXRlOiB7XG4gICAgbGFiZWw6IFwiUGVybWlzc2lvbiBnYXRlXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlByb21wdCBmb3IgY29uZmlybWF0aW9uIG9uIGRhbmdlcm91cyBjb21tYW5kcyAocm0gLXJmLCBzdWRvLCBldGMuKVwiLFxuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyR3VhcmRyYWlsc1NldHRpbmdzKHBpOiBFeHRlbnNpb25BUEkpOiB2b2lkIHtcbiAgcmVnaXN0ZXJTZXR0aW5nc0NvbW1hbmQ8R3VhcmRyYWlsc0NvbmZpZywgUmVzb2x2ZWRDb25maWc+KHBpLCB7XG4gICAgY29tbWFuZE5hbWU6IFwiZ3VhcmRyYWlsczpzZXR0aW5nc1wiLFxuICAgIHRpdGxlOiBcIkd1YXJkcmFpbHMgU2V0dGluZ3NcIixcbiAgICBjb25maWdTdG9yZTogY29uZmlnTG9hZGVyLFxuICAgIGJ1aWxkU2VjdGlvbnM6IChcbiAgICAgIHRhYkNvbmZpZzogR3VhcmRyYWlsc0NvbmZpZyB8IG51bGwsXG4gICAgICByZXNvbHZlZDogUmVzb2x2ZWRDb25maWcsXG4gICAgICB7IHNldERyYWZ0IH0sXG4gICAgKTogU2V0dGluZ3NTZWN0aW9uW10gPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ3NUaGVtZSA9IGdldFNldHRpbmdzTGlzdFRoZW1lKCk7XG4gICAgICAvLyAtLS0gSGVscGVycyAtLS1cblxuICAgICAgZnVuY3Rpb24gY291bnQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHRhYkNvbmZpZyA/PyB7fSwgaWQpIGFzIHVua25vd25bXSB8IHVuZGVmaW5lZCkgPz9cbiAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocmVzb2x2ZWQsIGlkKSBhcyB1bmtub3duW10pID8/XG4gICAgICAgICAgW107XG4gICAgICAgIHJldHVybiBgJHt2YWwubGVuZ3RofSBpdGVtc2A7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGFwcGx5RHJhZnQoaWQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHN0cnVjdHVyZWRDbG9uZSh0YWJDb25maWcgPz8ge30pIGFzIEd1YXJkcmFpbHNDb25maWc7XG4gICAgICAgIHNldE5lc3RlZFZhbHVlKHVwZGF0ZWQsIGlkLCB2YWx1ZSk7XG4gICAgICAgIHNldERyYWZ0KHVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyAtLS0gU3VibWVudSBmYWN0b3JpZXMgLS0tXG5cbiAgICAgIGZ1bmN0aW9uIHN0cmluZ0FycmF5U3VibWVudShpZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAoX3ZhbDogc3RyaW5nLCBzdWJtZW51RG9uZTogKHY/OiBzdHJpbmcpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtcyA9XG4gICAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUodGFiQ29uZmlnID8/IHt9LCBpZCkgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQpID8/XG4gICAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocmVzb2x2ZWQsIGlkKSBhcyBzdHJpbmdbXSkgPz9cbiAgICAgICAgICAgIFtdO1xuICAgICAgICAgIGxldCBsYXRlc3QgPSBbLi4uaXRlbXNdO1xuICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlFZGl0b3Ioe1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBpdGVtczogWy4uLml0ZW1zXSxcbiAgICAgICAgICAgIHRoZW1lOiBzZXR0aW5nc1RoZW1lLFxuICAgICAgICAgICAgb25TYXZlOiAobmV3SXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgbGF0ZXN0ID0gbmV3SXRlbXM7XG4gICAgICAgICAgICAgIGFwcGx5RHJhZnQoaWQsIG5ld0l0ZW1zKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkRvbmU6ICgpID0+IHN1Ym1lbnVEb25lKGAke2xhdGVzdC5sZW5ndGh9IGl0ZW1zYCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHBhdHRlcm5TdWJtZW51KFxuICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBjb250ZXh0PzogXCJmaWxlXCIgfCBcImNvbW1hbmRcIixcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKF92YWw6IHN0cmluZywgc3VibWVudURvbmU6ICh2Pzogc3RyaW5nKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPVxuICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHRhYkNvbmZpZyA/PyB7fSwgaWQpIGFzXG4gICAgICAgICAgICAgIHwgRGFuZ2Vyb3VzUGF0dGVybltdXG4gICAgICAgICAgICAgIHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJlc29sdmVkLCBpZCkgYXMgRGFuZ2Vyb3VzUGF0dGVybltdKSA/P1xuICAgICAgICAgICAgW107XG4gICAgICAgICAgbGV0IGxhdGVzdENvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybkVkaXRvcih7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIGl0ZW1zOiBbLi4uaXRlbXNdLFxuICAgICAgICAgICAgdGhlbWU6IHNldHRpbmdzVGhlbWUsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgb25TYXZlOiAobmV3SXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgbGF0ZXN0Q291bnQgPSBuZXdJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICAgIGFwcGx5RHJhZnQoaWQsIG5ld0l0ZW1zKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkRvbmU6ICgpID0+IHN1Ym1lbnVEb25lKGAke2xhdGVzdENvdW50fSBpdGVtc2ApLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwYXR0ZXJuQ29uZmlnU3VibWVudShcbiAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgY29udGV4dD86IFwiZmlsZVwiIHwgXCJjb21tYW5kXCIsXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIChfdmFsOiBzdHJpbmcsIHN1Ym1lbnVEb25lOiAodj86IHN0cmluZykgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9XG4gICAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUodGFiQ29uZmlnID8/IHt9LCBpZCkgYXNcbiAgICAgICAgICAgICAgfCBQYXR0ZXJuQ29uZmlnW11cbiAgICAgICAgICAgICAgfCB1bmRlZmluZWQpID8/XG4gICAgICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocmVzb2x2ZWQsIGlkKSBhcyBQYXR0ZXJuQ29uZmlnW10pID8/XG4gICAgICAgICAgICBbXTtcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IGN1cnJlbnRJdGVtcy5tYXAoKHApID0+ICh7XG4gICAgICAgICAgICBwYXR0ZXJuOiBwLnBhdHRlcm4sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcC5wYXR0ZXJuLFxuICAgICAgICAgICAgcmVnZXg6IHAucmVnZXgsXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGxldCBsYXRlc3RDb3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhdHRlcm5FZGl0b3Ioe1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgIHRoZW1lOiBzZXR0aW5nc1RoZW1lLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIG9uU2F2ZTogKG5ld0l0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgIGxhdGVzdENvdW50ID0gbmV3SXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICBjb25zdCBjb25maWdzOiBQYXR0ZXJuQ29uZmlnW10gPSBuZXdJdGVtcy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZmc6IFBhdHRlcm5Db25maWcgPSB7IHBhdHRlcm46IHAucGF0dGVybiB9O1xuICAgICAgICAgICAgICAgIGlmIChwLnJlZ2V4KSBjZmcucmVnZXggPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjZmc7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBhcHBseURyYWZ0KGlkLCBjb25maWdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkRvbmU6ICgpID0+IHN1Ym1lbnVEb25lKGAke2xhdGVzdENvdW50fSBpdGVtc2ApLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAtLS0gU2VjdGlvbnMgLS0tXG5cbiAgICAgIGNvbnN0IGZlYXR1cmVJdGVtcyA9IChPYmplY3Qua2V5cyhGRUFUVVJFX1VJKSBhcyBGZWF0dXJlS2V5W10pLm1hcChcbiAgICAgICAgKGtleSkgPT4gKHtcbiAgICAgICAgICBpZDogYGZlYXR1cmVzLiR7a2V5fWAsXG4gICAgICAgICAgbGFiZWw6IEZFQVRVUkVfVUlba2V5XS5sYWJlbCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogRkVBVFVSRV9VSVtrZXldLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGN1cnJlbnRWYWx1ZTpcbiAgICAgICAgICAgICh0YWJDb25maWc/LmZlYXR1cmVzPy5ba2V5XSA/PyByZXNvbHZlZC5mZWF0dXJlc1trZXldKVxuICAgICAgICAgICAgICA/IFwiZW5hYmxlZFwiXG4gICAgICAgICAgICAgIDogXCJkaXNhYmxlZFwiLFxuICAgICAgICAgIHZhbHVlczogW1wiZW5hYmxlZFwiLCBcImRpc2FibGVkXCJdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6IFwiRmVhdHVyZXNcIiwgaXRlbXM6IGZlYXR1cmVJdGVtcyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IFwiRW52IEZpbGVzXCIsXG4gICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IFwiZW52RmlsZXMub25seUJsb2NrSWZFeGlzdHNcIixcbiAgICAgICAgICAgICAgbGFiZWw6IFwiT25seSBibG9jayBleGlzdGluZyBmaWxlc1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICBcIk9ubHkgYmxvY2sgLmVudiBmaWxlIGFjY2VzcyBpZiB0aGUgZmlsZSBleGlzdHMgb24gZGlza1wiLFxuICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgICAgICAgICAgKHRhYkNvbmZpZz8uZW52RmlsZXM/Lm9ubHlCbG9ja0lmRXhpc3RzID8/XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWQuZW52RmlsZXMub25seUJsb2NrSWZFeGlzdHMpXG4gICAgICAgICAgICAgICAgICA/IFwib25cIlxuICAgICAgICAgICAgICAgICAgOiBcIm9mZlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IFtcIm9uXCIsIFwib2ZmXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IFwiZW52RmlsZXMucHJvdGVjdGVkUGF0dGVybnNcIixcbiAgICAgICAgICAgICAgbGFiZWw6IFwiUHJvdGVjdGVkIHBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhdHRlcm5zIGZvciBmaWxlcyB0byBwcm90ZWN0IChlLmcuIC5lbnYubG9jYWwpXCIsXG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY291bnQoXCJlbnZGaWxlcy5wcm90ZWN0ZWRQYXR0ZXJuc1wiKSxcbiAgICAgICAgICAgICAgc3VibWVudTogcGF0dGVybkNvbmZpZ1N1Ym1lbnUoXG4gICAgICAgICAgICAgICAgXCJlbnZGaWxlcy5wcm90ZWN0ZWRQYXR0ZXJuc1wiLFxuICAgICAgICAgICAgICAgIFwiUHJvdGVjdGVkIFBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogXCJlbnZGaWxlcy5hbGxvd2VkUGF0dGVybnNcIixcbiAgICAgICAgICAgICAgbGFiZWw6IFwiQWxsb3dlZCBwYXR0ZXJuc1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQYXR0ZXJucyBmb3IgZXhjZXB0aW9ucyAoZS5nLiAuZW52LmV4YW1wbGUpXCIsXG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY291bnQoXCJlbnZGaWxlcy5hbGxvd2VkUGF0dGVybnNcIiksXG4gICAgICAgICAgICAgIHN1Ym1lbnU6IHBhdHRlcm5Db25maWdTdWJtZW51KFxuICAgICAgICAgICAgICAgIFwiZW52RmlsZXMuYWxsb3dlZFBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgICAgXCJBbGxvd2VkIFBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogXCJlbnZGaWxlcy5wcm90ZWN0ZWREaXJlY3Rvcmllc1wiLFxuICAgICAgICAgICAgICBsYWJlbDogXCJQcm90ZWN0ZWQgZGlyZWN0b3JpZXNcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUGF0dGVybnMgZm9yIGRpcmVjdG9yaWVzIHRvIHByb3RlY3RcIixcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiBjb3VudChcImVudkZpbGVzLnByb3RlY3RlZERpcmVjdG9yaWVzXCIpLFxuICAgICAgICAgICAgICBzdWJtZW51OiBwYXR0ZXJuQ29uZmlnU3VibWVudShcbiAgICAgICAgICAgICAgICBcImVudkZpbGVzLnByb3RlY3RlZERpcmVjdG9yaWVzXCIsXG4gICAgICAgICAgICAgICAgXCJQcm90ZWN0ZWQgRGlyZWN0b3JpZXNcIixcbiAgICAgICAgICAgICAgICBcImZpbGVcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBcImVudkZpbGVzLnByb3RlY3RlZFRvb2xzXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIlByb3RlY3RlZCB0b29sc1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICBcIlRvb2xzIHRvIGludGVyY2VwdCAocmVhZCwgd3JpdGUsIGVkaXQsIGJhc2gsIGdyZXAsIGZpbmQsIGxzKVwiLFxuICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNvdW50KFwiZW52RmlsZXMucHJvdGVjdGVkVG9vbHNcIiksXG4gICAgICAgICAgICAgIHN1Ym1lbnU6IHN0cmluZ0FycmF5U3VibWVudShcbiAgICAgICAgICAgICAgICBcImVudkZpbGVzLnByb3RlY3RlZFRvb2xzXCIsXG4gICAgICAgICAgICAgICAgXCJQcm90ZWN0ZWQgVG9vbHNcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBcIlBlcm1pc3Npb24gR2F0ZVwiLFxuICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBcInBlcm1pc3Npb25HYXRlLnJlcXVpcmVDb25maXJtYXRpb25cIixcbiAgICAgICAgICAgICAgbGFiZWw6IFwiUmVxdWlyZSBjb25maXJtYXRpb25cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgXCJTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2cgZm9yIGRhbmdlcm91cyBjb21tYW5kcyAoaWYgb2ZmLCBqdXN0IHdhcm5zKVwiLFxuICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgICAgICAgICAgKHRhYkNvbmZpZz8ucGVybWlzc2lvbkdhdGU/LnJlcXVpcmVDb25maXJtYXRpb24gPz9cbiAgICAgICAgICAgICAgICByZXNvbHZlZC5wZXJtaXNzaW9uR2F0ZS5yZXF1aXJlQ29uZmlybWF0aW9uKVxuICAgICAgICAgICAgICAgICAgPyBcIm9uXCJcbiAgICAgICAgICAgICAgICAgIDogXCJvZmZcIixcbiAgICAgICAgICAgICAgdmFsdWVzOiBbXCJvblwiLCBcIm9mZlwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBcInBlcm1pc3Npb25HYXRlLnBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIkRhbmdlcm91cyBwYXR0ZXJuc1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb21tYW5kIHBhdHRlcm5zIHRoYXQgdHJpZ2dlciB0aGUgcGVybWlzc2lvbiBnYXRlXCIsXG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY291bnQoXCJwZXJtaXNzaW9uR2F0ZS5wYXR0ZXJuc1wiKSxcbiAgICAgICAgICAgICAgc3VibWVudTogcGF0dGVyblN1Ym1lbnUoXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uR2F0ZS5wYXR0ZXJuc1wiLFxuICAgICAgICAgICAgICAgIFwiRGFuZ2Vyb3VzIFBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgICAgXCJjb21tYW5kXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogXCJwZXJtaXNzaW9uR2F0ZS5hbGxvd2VkUGF0dGVybnNcIixcbiAgICAgICAgICAgICAgbGFiZWw6IFwiQWxsb3dlZCBjb21tYW5kc1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQYXR0ZXJucyB0aGF0IGJ5cGFzcyB0aGUgcGVybWlzc2lvbiBnYXRlIGVudGlyZWx5XCIsXG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY291bnQoXCJwZXJtaXNzaW9uR2F0ZS5hbGxvd2VkUGF0dGVybnNcIiksXG4gICAgICAgICAgICAgIHN1Ym1lbnU6IHBhdHRlcm5Db25maWdTdWJtZW51KFxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbkdhdGUuYWxsb3dlZFBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgICAgXCJBbGxvd2VkIENvbW1hbmRzXCIsXG4gICAgICAgICAgICAgICAgXCJjb21tYW5kXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogXCJwZXJtaXNzaW9uR2F0ZS5hdXRvRGVueVBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIkF1dG8tZGVueSBwYXR0ZXJuc1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICBcIlBhdHRlcm5zIHRoYXQgYmxvY2sgY29tbWFuZHMgaW1tZWRpYXRlbHkgd2l0aG91dCBkaWFsb2dcIixcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiBjb3VudChcInBlcm1pc3Npb25HYXRlLmF1dG9EZW55UGF0dGVybnNcIiksXG4gICAgICAgICAgICAgIHN1Ym1lbnU6IHBhdHRlcm5Db25maWdTdWJtZW51KFxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbkdhdGUuYXV0b0RlbnlQYXR0ZXJuc1wiLFxuICAgICAgICAgICAgICAgIFwiQXV0by1EZW55IFBhdHRlcm5zXCIsXG4gICAgICAgICAgICAgICAgXCJjb21tYW5kXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0sXG4gIH0pO1xufVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MjI5OTY0fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAocmVhZCkifSwiaWQiOiJiZTkwYTA5NyIsInBhcmVudElkIjoiODIwZDQwNmEiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjU1Ljk5N1oifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJjYTExZDYyZiIsInBhcmVudElkIjoiYmU5MGEwOTciLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjU1Ljk5N1oiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJOb3cgbGV0IG1lIGNoZWNrIHRoZSBleGlzdGluZyBmaWxlcyBpbiB0aGUgcHJvamVjdCBhbmQgbG9vayBhdCBob3cgcHJvdmlkZXJzIGV4dGVuc2lvbiB3b3JrczoifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDE0dW1HTUJ2cmZZNjZpZXhxNVJWc3htIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlL3RzY29uZmlnLmpzb24ifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxVm52QWlNRXVzdlV0R1ZxU3VENEc3YyIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS9zaGVsbC5uaXgifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxRkZCcXRGd0ZLdWlnQnBqaVREbmZUQSIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS8uZW52cmMifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxR0hqYmlONHFmeVcxQjIyQUVmNW5YMyIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZS9iaW9tZS5qc29uIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjI4NiwiY2FjaGVSZWFkIjoyOTIxMSwiY2FjaGVXcml0ZSI6NDYyMSwidG90YWxUb2tlbnMiOjM0MTE5LCJjb3N0Ijp7ImlucHV0IjowLjAwMDAwNSwib3V0cHV0IjowLjAwNzE1LCJjYWNoZVJlYWQiOjAuMDE0NjA1NDk5OTk5OTk5OTk5LCJjYWNoZVdyaXRlIjowLjAyODg4MTI1LCJ0b3RhbCI6MC4wNTA2NDE3NX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzIyOTk3NH19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiM2NkYTkyNWQiLCJwYXJlbnRJZCI6ImNhMTFkNjJmIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo1Ni4wMDlaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiOTVlMDI3NTIiLCJwYXJlbnRJZCI6IjNjZGE5MjVkIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo1Ni4wMTJaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMTR1bUdNQnZyZlk2NmlleHE1UlZzeG0iLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJ7XG4gIFwiY29tcGlsZXJPcHRpb25zXCI6IHtcbiAgICBcInRhcmdldFwiOiBcIkVTMjAyMlwiLFxuICAgIFwibW9kdWxlXCI6IFwiRVNOZXh0XCIsXG4gICAgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwiYnVuZGxlclwiLFxuICAgIFwic3RyaWN0XCI6IHRydWUsXG4gICAgXCJlc01vZHVsZUludGVyb3BcIjogdHJ1ZSxcbiAgICBcInNraXBMaWJDaGVja1wiOiB0cnVlLFxuICAgIFwiZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXNcIjogdHJ1ZSxcbiAgICBcInJlc29sdmVKc29uTW9kdWxlXCI6IHRydWUsXG4gICAgXCJub0VtaXRcIjogdHJ1ZVxuICB9LFxuICBcImluY2x1ZGVcIjogW1wic3JjLyoqLypcIl0sXG4gIFwiZXhjbHVkZVwiOiBbXCJub2RlX21vZHVsZXNcIl1cbn1cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIzNjAwOH19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiZjc5MzNjNTEiLCJwYXJlbnRJZCI6Ijk1ZTAyNzUyIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo1Ni4wMTlaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYjkyZDVhNmMiLCJwYXJlbnRJZCI6ImY3OTMzYzUxIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1Mzo1Ni4wMTlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVZudkFpTUV1c3ZVdEdWcVN1RDRHN2MiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJ7XG4gIHBrZ3MgPyBpbXBvcnQgPG5peHBrZ3M+IHsgfSxcbn06XG5cbnBrZ3MubWtTaGVsbCB7XG4gIGJ1aWxkSW5wdXRzID0gd2l0aCBwa2dzOyBbXG4gICAgbm9kZWpzXG4gICAgcG5wbV8xMFxuICBdO1xufVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MjM2MDE5fX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAocmVhZCkifSwiaWQiOiJiYTIwYzE1MyIsInBhcmVudElkIjoiYjkyZDVhNmMiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjU2LjAyNFoifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJkMGE4NmEzYSIsInBhcmVudElkIjoiYmEyMGMxNTMiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjUzOjU2LjAyNFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxRkZCcXRGd0ZLdWlnQnBqaVREbmZUQSIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgc2hlbGxjaGVjayBkaXNhYmxlPTIxNDgsMjA4NlxuXG4jIFVzZSBgc291cmNlX3VwYCBpZiBwYXJ0IG9mIGEgbW9ub3JlcG8uXG5cbnVzZSBuaXhcblxuIyBMb2FkIGxheW91dHMuIFRoaXMgYmFzaWNhbGx5IGp1c3Qgc2V0cyB1cCBQQVRIIGFuZCBvdGhlciBlbnYgdmFycy5cbiMgUG9zc2libGUgdmFsdWVzIGFyZSBcIm5vZGVcIiwgXCJidW5cIiwgYW5kIFwidXZcIi5cbiNcbiMgT3B0aW9uczpcbiMgICAtLWRlbnkgYmluMSxiaW4yLC4uLiAgRXhjbHVkZSBiaW5hcmllcyBmcm9tIGxvY2FsIFBBVEgsIGZhbGxpbmcgYmFjayB0byBzeXN0ZW0uXG4jICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCB3aGVuIGEgbG9jYWwgYmluYXJ5IHNoYWRvd3MgYSBzeXN0ZW0gb25lIHlvdSBuZWVkLlxuI1xuIyBFeGFtcGxlczpcbiMgICBsYXlvdXQgbm9kZVxuIyAgIGxheW91dCBub2RlIC0tZGVueSBwaSxwcmV0dGllclxuIyAgIGxheW91dCB1diAtLWRlbnkgcHl0aG9uXG5cbmlmIGhhcyBub2RlOyB0aGVuXG4gIGxheW91dCBub2RlIC0tZGVueSBwaVxuZmlcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIzNjAyNH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjQ1NmNkNGQwIiwicGFyZW50SWQiOiJkMGE4NmEzYSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTM6NTYuMDI3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFHSGpiaU40cWZ5VzFCMjJBRWY1blgzIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0Ijoie1xuICBcIiRzY2hlbWFcIjogXCJodHRwczovL2Jpb21lanMuZGV2L3NjaGVtYXMvMi4zLjEzL3NjaGVtYS5qc29uXCIsXG4gIFwidmNzXCI6IHtcbiAgICBcImVuYWJsZWRcIjogdHJ1ZSxcbiAgICBcImNsaWVudEtpbmRcIjogXCJnaXRcIixcbiAgICBcInVzZUlnbm9yZUZpbGVcIjogdHJ1ZVxuICB9LFxuICBcImZpbGVzXCI6IHtcbiAgICBcImluY2x1ZGVzXCI6IFtcIioqLyoudHNcIiwgXCIqKi8qLmpzb25cIl0sXG4gICAgXCJpZ25vcmVVbmtub3duXCI6IHRydWVcbiAgfSxcbiAgXCJhc3Npc3RcIjoge1xuICAgIFwiYWN0aW9uc1wiOiB7XG4gICAgICBcInNvdXJjZVwiOiB7XG4gICAgICAgIFwib3JnYW5pemVJbXBvcnRzXCI6IFwib25cIlxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgXCJsaW50ZXJcIjoge1xuICAgIFwiZW5hYmxlZFwiOiB0cnVlLFxuICAgIFwicnVsZXNcIjoge1xuICAgICAgXCJyZWNvbW1lbmRlZFwiOiB0cnVlXG4gICAgfVxuICB9LFxuICBcImZvcm1hdHRlclwiOiB7XG4gICAgXCJlbmFibGVkXCI6IHRydWUsXG4gICAgXCJpbmRlbnRTdHlsZVwiOiBcInNwYWNlXCIsXG4gICAgXCJpbmRlbnRXaWR0aFwiOiAyXG4gIH1cbn1cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzIzNjAyN319LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKGJhc2gpIn0sImlkIjoiYWJhNmQzNjQiLCJwYXJlbnRJZCI6IjQ1NmNkNGQwIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NDowMS4xMDNaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYTdkYzM5MWIiLCJwYXJlbnRJZCI6ImFiYTZkMzY0IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NDowMS4xMDRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiTm93IGxldCBtZSBsb29rIGF0IGhvdyBgcmVnaXN0ZXJQcm92aWRlcmAgd29ya3Mgd2l0aCB0aGUgc2ltcGxlIGZvcm0gZnJvbSB0aGUgUE9DLCBhbmQgY2hlY2sgd2hhdCBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSB0byBsaXN0OiJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMUZFUDh6VXJGMkpSOVpWaUJTVXE0YVUiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZ3JlcCAtciBcInJlZ2lzdGVyUHJvdmlkZXJcIiAvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvcHJvdmlkZXJzLyAtLWluY2x1ZGU9XCIqLnRzXCIgLWwgfCBoZWFkIC01In19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMTFYR3hQUmlOM2JiOUdCOE5YVlFGZzkiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9wYWNrYWdlcy9zZXR0aW5ncy9zZXR0aW5ncy1jb21tYW5kLnRzIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjE5MiwiY2FjaGVSZWFkIjozMzgzMiwiY2FjaGVXcml0ZSI6OTI5LCJ0b3RhbFRva2VucyI6MzQ5NTQsImNvc3QiOnsiaW5wdXQiOjAuMDAwMDA1LCJvdXRwdXQiOjAuMDA0ODAwMDAwMDAwMDAwMDAwNCwiY2FjaGVSZWFkIjowLjAxNjkxNiwiY2FjaGVXcml0ZSI6MC4wMDU4MDYyNTAwMDAwMDAwMDEsInRvdGFsIjowLjAyNzUyNzI1MDAwMDAwMDAwM319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzIzNjAyOH19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiZTE2YWNiYjQiLCJwYXJlbnRJZCI6ImE3ZGMzOTFiIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NDowMS4xMjlaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiODM5NWU2MTQiLCJwYXJlbnRJZCI6ImUxNmFjYmI0IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NDowMS4xMjlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMUZFUDh6VXJGMkpSOVpWaUJTVXE0YVUiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS1leHRlbnNpb25zL2V4dGVuc2lvbnMvcHJvdmlkZXJzL2NvbW1hbmRzL3NldHRpbmdzLWNvbW1hbmQudHNcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvZXh0ZW5zaW9ucy9wcm92aWRlcnMvY29tbWFuZHMvaW5kZXgudHNcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzI0MTEyOX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjA2ODI2OGEwIiwicGFyZW50SWQiOiI4Mzk1ZTYxNCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTQ6MDEuMTQxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDExWEd4UFJpTjNiYjlHQjhOWFZRRmc5IiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiLyoqXG4gKiBTZXR0aW5ncyBjb21tYW5kIHJlZ2lzdHJhdGlvbiBoZWxwZXIuXG4gKlxuICogQ3JlYXRlcyBhIC97bmFtZX06c2V0dGluZ3MgY29tbWFuZCB3aXRoIHRhYnMgZm9yIGVhY2ggZW5hYmxlZCBzY29wZS5cbiAqIENoYW5nZXMgYXJlIHRyYWNrZWQgaW4gbWVtb3J5LiBDdHJsK1Mgc2F2ZXMsIEVzYyBleGl0cyB3aXRob3V0IHNhdmluZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbkFQSSB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiO1xuaW1wb3J0IHsgZ2V0U2V0dGluZ3NMaXN0VGhlbWUgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcbmltcG9ydCB7IEtleSwgbWF0Y2hlc0tleSB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLXR1aVwiO1xuaW1wb3J0IHtcbiAgU2VjdGlvbmVkU2V0dGluZ3MsXG4gIHR5cGUgU2V0dGluZ3NTZWN0aW9uLFxufSBmcm9tIFwiLi9jb21wb25lbnRzL3NlY3Rpb25lZC1zZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdTdG9yZSwgU2NvcGUgfSBmcm9tIFwiLi9jb25maWctbG9hZGVyXCI7XG5pbXBvcnQge1xuICBkaXNwbGF5VG9TdG9yYWdlVmFsdWUsXG4gIGdldE5lc3RlZFZhbHVlLFxuICBzZXROZXN0ZWRWYWx1ZSxcbn0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG4vKiogRGlzcGxheSBsYWJlbHMgZm9yIGVhY2ggc2NvcGUgKi9cbmNvbnN0IFNDT1BFX0xBQkVMUzogUmVjb3JkPFNjb3BlLCBzdHJpbmc+ID0ge1xuICBnbG9iYWw6IFwiR2xvYmFsXCIsXG4gIGxvY2FsOiBcIkxvY2FsXCIsXG4gIG1lbW9yeTogXCJNZW1vcnlcIixcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dGluZ3NDb21tYW5kT3B0aW9uczxcbiAgVENvbmZpZyBleHRlbmRzIG9iamVjdCxcbiAgVFJlc29sdmVkIGV4dGVuZHMgb2JqZWN0LFxuPiB7XG4gIC8qKiBDb21tYW5kIG5hbWUsIGUuZy4gXCJ0b29sY2hhaW46c2V0dGluZ3NcIiAqL1xuICBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAvKiogQ29tbWFuZCBkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbW1hbmQgcGFsZXR0ZS4gKi9cbiAgY29tbWFuZERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGl0bGUgc2hvd24gYXQgdGhlIHRvcCBvZiB0aGUgc2V0dGluZ3MgVUkuICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBDb25maWcgc3RvcmUgKENvbmZpZ0xvYWRlciBvciBjdXN0b20gaW1wbGVtZW50YXRpb24pLiAqL1xuICBjb25maWdTdG9yZTogQ29uZmlnU3RvcmU8VENvbmZpZywgVFJlc29sdmVkPjtcbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzZWN0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdGFiLlxuICAgKiBDYWxsZWQgb24gaW5pdGlhbCByZW5kZXIsIHRhYiBzd2l0Y2gsIGFuZCBhZnRlciBzYXZpbmcuXG4gICAqXG4gICAqIFVzZSBjdHguc2V0RHJhZnQgaW4gc3VibWVudSBvblNhdmUgY2FsbGJhY2tzIHRvIHN0b3JlIGNoYW5nZXNcbiAgICogaW4gdGhlIGRyYWZ0LiBBbGwgY2hhbmdlcyAodG9nZ2xlcywgZW51bXMsIHN1Ym1lbnVzKSBhcmUgb25seVxuICAgKiBwZXJzaXN0ZWQgdG8gZGlzayBvbiBDdHJsK1MuXG4gICAqXG4gICAqIEZvciBtZW1vcnkgc2NvcGUsIHRhYkNvbmZpZyBpcyBudWxsIHdoZW4gbm8gb3ZlcnJpZGVzIGV4aXN0IHlldC5cbiAgICogVXNlIHJlc29sdmVkIHZhbHVlcyBhcyBkaXNwbGF5IHZhbHVlcyBpbiB0aGF0IGNhc2UuXG4gICAqL1xuICBidWlsZFNlY3Rpb25zOiAoXG4gICAgdGFiQ29uZmlnOiBUQ29uZmlnIHwgbnVsbCxcbiAgICByZXNvbHZlZDogVFJlc29sdmVkLFxuICAgIGN0eDoge1xuICAgICAgc2V0RHJhZnQ6IChjb25maWc6IFRDb25maWcpID0+IHZvaWQ7XG4gICAgICBzY29wZTogU2NvcGU7XG4gICAgICBpc0luaGVyaXRlZDogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgICB9LFxuICApID0+IFNldHRpbmdzU2VjdGlvbltdO1xuICAvKipcbiAgICogQ3VzdG9tIGNoYW5nZSBoYW5kbGVyLiBSZWNlaXZlcyB0aGUgc2V0dGluZyBJRCwgbmV3IGRpc3BsYXkgdmFsdWUsXG4gICAqIGFuZCBhIGNsb25lIG9mIHRoZSBjdXJyZW50IHRhYiBjb25maWcuIFJldHVybiB0aGUgdXBkYXRlZCBjb25maWcsXG4gICAqIG9yIG51bGwgdG8gc2tpcCB0aGUgY2hhbmdlLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IGhhbmRsZXIgbWFwcyBib29sZWFuIGRpc3BsYXkgdmFsdWVzXG4gICAqIChlbmFibGVkL2Rpc2FibGVkLCBvbi9vZmYpIHRvIHRydWUvZmFsc2UgYW5kIHNldHMgdmlhIGRvdHRlZCBwYXRoLlxuICAgKiBFbnVtIHN0cmluZ3MgKGUuZy4gXCJwbnBtXCIpIGFyZSBzdG9yZWQgYXMtaXMuXG4gICAqL1xuICBvblNldHRpbmdDaGFuZ2U/OiAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogc3RyaW5nLFxuICAgIGNvbmZpZzogVENvbmZpZyxcbiAgKSA9PiBUQ29uZmlnIHwgbnVsbDtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBzYXZlIHN1Y2NlZWRzLiBVc2UgdGhpcyB0byByZWxvYWQgcnVudGltZSBzdGF0ZVxuICAgKiB0aGF0IHdhcyBjYXB0dXJlZCBhdCBleHRlbnNpb24gaW5pdCB0aW1lLlxuICAgKi9cbiAgb25TYXZlPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDaGFuZ2VIYW5kbGVyPFRDb25maWcgZXh0ZW5kcyBvYmplY3Q+KFxuICBpZDogc3RyaW5nLFxuICBuZXdWYWx1ZTogc3RyaW5nLFxuICBjb25maWc6IFRDb25maWcsXG4pOiBUQ29uZmlnIHtcbiAgY29uc3QgdXBkYXRlZCA9IHN0cnVjdHVyZWRDbG9uZShjb25maWcpO1xuICBzZXROZXN0ZWRWYWx1ZSh1cGRhdGVkLCBpZCwgZGlzcGxheVRvU3RvcmFnZVZhbHVlKG5ld1ZhbHVlKSk7XG4gIHJldHVybiB1cGRhdGVkO1xufVxuXG4vKipcbiAqIEZpbmQgd2hldGhlciBhbiBpdGVtIGluIHRoZSBnaXZlbiBzZWN0aW9ucyBoYXMgYSBzdWJtZW51LlxuICogVXNlZCB0byBkaXN0aW5ndWlzaCB2YWx1ZSBjeWNsaW5nICh0cmFjayBkcmFmdCkgZnJvbSBzdWJtZW51IGNsb3NlIChyZWZyZXNoIG9ubHkpLlxuICovXG5mdW5jdGlvbiBpc1N1Ym1lbnVJdGVtKHNlY3Rpb25zOiBTZXR0aW5nc1NlY3Rpb25bXSwgaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc2VjdGlvbi5pdGVtcykge1xuICAgICAgaWYgKGl0ZW0uaWQgPT09IGlkICYmIGl0ZW0uc3VibWVudSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU2V0dGluZ3NDb21tYW5kPFxuICBUQ29uZmlnIGV4dGVuZHMgb2JqZWN0LFxuICBUUmVzb2x2ZWQgZXh0ZW5kcyBvYmplY3QsXG4+KHBpOiBFeHRlbnNpb25BUEksIG9wdGlvbnM6IFNldHRpbmdzQ29tbWFuZE9wdGlvbnM8VENvbmZpZywgVFJlc29sdmVkPik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgY29tbWFuZE5hbWUsXG4gICAgdGl0bGUsXG4gICAgY29uZmlnU3RvcmUsXG4gICAgYnVpbGRTZWN0aW9ucyxcbiAgICBvblNldHRpbmdDaGFuZ2UsXG4gICAgb25TYXZlLFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGVzY3JpcHRpb24gPVxuICAgIG9wdGlvbnMuY29tbWFuZERlc2NyaXB0aW9uID8/XG4gICAgYENvbmZpZ3VyZSAke2NvbW1hbmROYW1lLnNwbGl0KFwiOlwiKVswXX0gc2V0dGluZ3NgO1xuICBjb25zdCBleHRlbnNpb25MYWJlbCA9IGNvbW1hbmROYW1lLnNwbGl0KFwiOlwiKVswXSA/PyB0aXRsZTtcblxuICBwaS5yZWdpc3RlckNvbW1hbmQoY29tbWFuZE5hbWUsIHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBoYW5kbGVyOiBhc3luYyAoX2FyZ3MsIGN0eCkgPT4ge1xuICAgICAgaWYgKCFjdHguaGFzVUkpIHJldHVybjtcblxuICAgICAgY29uc3QgZW5hYmxlZFNjb3BlcyA9IGNvbmZpZ1N0b3JlLmdldEVuYWJsZWRTY29wZXMoKTtcbiAgICAgIGlmIChlbmFibGVkU2NvcGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjdHgudWkubm90aWZ5KFwiTm8gc2NvcGVzIGNvbmZpZ3VyZWRcIiwgXCJlcnJvclwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWZhdWx0IHRvIGZpcnN0IHNjb3BlIHdpdGggZXhpc3RpbmcgY29uZmlnLCBlbHNlIGZpcnN0IGVuYWJsZWQgc2NvcGVcbiAgICAgIC8vIFNhZmU6IHdlIGNoZWNrIGVuYWJsZWRTY29wZXMubGVuZ3RoID4gMCBhYm92ZVxuICAgICAgbGV0IGFjdGl2ZVNjb3BlOiBTY29wZSA9XG4gICAgICAgIGVuYWJsZWRTY29wZXMuZmluZCgocykgPT4gY29uZmlnU3RvcmUuaGFzQ29uZmlnKHMpKSA/P1xuICAgICAgICAoZW5hYmxlZFNjb3Blc1swXSBhcyBTY29wZSk7XG5cbiAgICAgIGF3YWl0IGN0eC51aS5jdXN0b20oKHR1aSwgdGhlbWUsIF9rYiwgZG9uZSkgPT4ge1xuICAgICAgICBsZXQgc2V0dGluZ3M6IFNlY3Rpb25lZFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50U2VjdGlvbnM6IFNldHRpbmdzU2VjdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHNldHRpbmdzVGhlbWUgPSBnZXRTZXR0aW5nc0xpc3RUaGVtZSgpO1xuXG4gICAgICAgIC8vIFBlci1zY29wZSBkcmFmdCBjb25maWdzLiBudWxsID0gbm8gY2hhbmdlcyBmcm9tIGRpc2svbWVtb3J5LlxuICAgICAgICBjb25zdCBkcmFmdHM6IFBhcnRpYWw8UmVjb3JkPFNjb3BlLCBUQ29uZmlnIHwgbnVsbD4+ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5hYmxlZFNjb3Blcykge1xuICAgICAgICAgIGRyYWZ0c1tzY29wZV0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIEhlbHBlcnMgLS0tXG5cbiAgICAgICAgLyoqIEdldCB0aGUgZWZmZWN0aXZlIGNvbmZpZyBmb3IgdGhlIGFjdGl2ZSBzY29wZSAoZHJhZnQgb3Igc3RvcmVkKS4gKi9cbiAgICAgICAgZnVuY3Rpb24gZ2V0VGFiQ29uZmlnKCk6IFRDb25maWcgfCBudWxsIHtcbiAgICAgICAgICByZXR1cm4gZHJhZnRzW2FjdGl2ZVNjb3BlXSA/PyBjb25maWdTdG9yZS5nZXRSYXdDb25maWcoYWN0aXZlU2NvcGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZvciBtZW1vcnkgc2NvcGU6IGNoZWNrIGlmIGEgcGF0aCBoYXMgYSB2YWx1ZSBpbiBtZW1vcnkgY29uZmlnLlxuICAgICAgICAgKiBJZiBub3QsIGl0J3MgaW5oZXJpdGVkIGZyb20gbG93ZXItcHJpb3JpdHkgc2NvcGVzLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaXNJbmhlcml0ZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgaWYgKGFjdGl2ZVNjb3BlICE9PSBcIm1lbW9yeVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWVtb3J5Q29uZmlnID1cbiAgICAgICAgICAgIGRyYWZ0cy5tZW1vcnkgPz8gY29uZmlnU3RvcmUuZ2V0UmF3Q29uZmlnKFwibWVtb3J5XCIpO1xuICAgICAgICAgIGlmICghbWVtb3J5Q29uZmlnKSByZXR1cm4gdHJ1ZTsgLy8gTm8gbWVtb3J5IGNvbmZpZyA9IGFsbCBpbmhlcml0ZWRcbiAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUobWVtb3J5Q29uZmlnLCBwYXRoKSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNEaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgICByZXR1cm4gZW5hYmxlZFNjb3Blcy5zb21lKChzY29wZSkgPT4gZHJhZnRzW3Njb3BlXSAhPT0gbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRTZWN0aW9ucygpOiBTZXR0aW5nc1NlY3Rpb25bXSB7XG4gICAgICAgICAgY29uc3QgdGFiQ29uZmlnID0gZ2V0VGFiQ29uZmlnKCk7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBjb25maWdTdG9yZS5nZXRDb25maWcoKTtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbnMgPSBidWlsZFNlY3Rpb25zKHRhYkNvbmZpZywgcmVzb2x2ZWQsIHtcbiAgICAgICAgICAgIHNldERyYWZ0OiAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGRyYWZ0c1thY3RpdmVTY29wZV0gPSBjb25maWc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NvcGU6IGFjdGl2ZVNjb3BlLFxuICAgICAgICAgICAgaXNJbmhlcml0ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWN0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2goKTogdm9pZCB7XG4gICAgICAgICAgc2V0dGluZ3M/LnVwZGF0ZVNlY3Rpb25zKGdldFNlY3Rpb25zKCkpO1xuICAgICAgICAgIHR1aS5yZXF1ZXN0UmVuZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBidWlsZFNldHRpbmdzQ29tcG9uZW50KHNjb3BlOiBTY29wZSk6IFNlY3Rpb25lZFNldHRpbmdzIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFNlY3Rpb25lZFNldHRpbmdzKFxuICAgICAgICAgICAgZ2V0U2VjdGlvbnMoKSxcbiAgICAgICAgICAgIDE1LFxuICAgICAgICAgICAgc2V0dGluZ3NUaGVtZSxcbiAgICAgICAgICAgIChpZCwgbmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlKHNjb3BlLCBpZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IGRvbmUodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHsgZW5hYmxlU2VhcmNoOiB0cnVlLCBoaW50U3VmZml4OiBcIkN0cmwrUyB0byBzYXZlXCIgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIENoYW5nZSBoYW5kbGVyIChpbi1tZW1vcnkgb25seSkgLS0tXG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKFxuICAgICAgICAgIHNjb3BlOiBTY29wZSxcbiAgICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgICAgICk6IHZvaWQge1xuICAgICAgICAgIC8vIFN1Ym1lbnUgaXRlbXMgaGFuZGxlIHRoZWlyIG93biBzYXZpbmcuXG4gICAgICAgICAgaWYgKGlzU3VibWVudUl0ZW0oY3VycmVudFNlY3Rpb25zLCBpZCkpIHtcbiAgICAgICAgICAgIHJlZnJlc2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGb3IgbWVtb3J5IHNjb3BlIHdpdGggbm8gZXhpc3RpbmcgY29uZmlnLCBzdGFydCBmcm9tIG1lcmdlZCBjb25maWdcbiAgICAgICAgICBsZXQgY3VycmVudCA9IGdldFRhYkNvbmZpZygpO1xuICAgICAgICAgIGlmIChzY29wZSA9PT0gXCJtZW1vcnlcIiAmJiBjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY29uZmlnU3RvcmUuZ2V0Q29uZmlnKCkgYXMgdW5rbm93biBhcyBUQ29uZmlnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBvblNldHRpbmdDaGFuZ2UgPz8gZGVmYXVsdENoYW5nZUhhbmRsZXI7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IGhhbmRsZXIoXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgc3RydWN0dXJlZENsb25lKGN1cnJlbnQgPz8gKHt9IGFzIFRDb25maWcpKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghdXBkYXRlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gU3RvcmUgaW4gZHJhZnQsIGRvbid0IHdyaXRlIHRvIGRpc2sgeWV0LlxuICAgICAgICAgIGRyYWZ0c1tzY29wZV0gPSB1cGRhdGVkO1xuICAgICAgICAgIHJlZnJlc2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBTYXZlIGhhbmRsZXIgKEN0cmwrUykgLS0tXG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICBsZXQgc2F2ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5hYmxlZFNjb3Blcykge1xuICAgICAgICAgICAgY29uc3QgZHJhZnQgPSBkcmFmdHNbc2NvcGVdO1xuICAgICAgICAgICAgaWYgKCFkcmFmdCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbmZpZ1N0b3JlLnNhdmUoc2NvcGUsIGRyYWZ0KTtcbiAgICAgICAgICAgICAgZHJhZnRzW3Njb3BlXSA9IG51bGw7XG4gICAgICAgICAgICAgIHNhdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGN0eC51aS5ub3RpZnkoXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBzYXZlICR7U0NPUEVfTEFCRUxTW3Njb3BlXX06ICR7ZXJyb3J9YCxcbiAgICAgICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNhdmVkKSB7XG4gICAgICAgICAgICBjdHgudWkubm90aWZ5KGAke2V4dGVuc2lvbkxhYmVsfTogc2F2ZWRgLCBcImluZm9cIik7XG4gICAgICAgICAgICBpZiAob25TYXZlKSBhd2FpdCBvblNhdmUoKTtcbiAgICAgICAgICAgIC8vIFJlYnVpbGQgd2l0aCBmcmVzaCBkYXRhLlxuICAgICAgICAgICAgc2V0dGluZ3MgPSBidWlsZFNldHRpbmdzQ29tcG9uZW50KGFjdGl2ZVNjb3BlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0dWkucmVxdWVzdFJlbmRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIFRhYiByZW5kZXJpbmcgLS0tXG5cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyVGFicygpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgLy8gU2luZ2xlIHNjb3BlID0gbm8gdGFicyBuZWVkZWRcbiAgICAgICAgICBpZiAoZW5hYmxlZFNjb3Blcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJcIl07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdGFiTGFiZWxzID0gZW5hYmxlZFNjb3Blcy5tYXAoKHNjb3BlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IFNDT1BFX0xBQkVMU1tzY29wZV07XG4gICAgICAgICAgICBjb25zdCBkaXJ0eU1hcmsgPSBkcmFmdHNbc2NvcGVdID8gXCIgKlwiIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxMYWJlbCA9IGAgJHtsYWJlbH0ke2RpcnR5TWFya30gYDtcblxuICAgICAgICAgICAgaWYgKHNjb3BlID09PSBhY3RpdmVTY29wZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhlbWUuYmcoXCJzZWxlY3RlZEJnXCIsIHRoZW1lLmZnKFwiYWNjZW50XCIsIGZ1bGxMYWJlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoZW1lLmZnKFwiZGltXCIsIGZ1bGxMYWJlbCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gW1wiXCIsIGAgICR7dGFiTGFiZWxzLmpvaW4oXCIgIFwiKX1gLCBcIlwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVRhYlN3aXRjaChkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAvLyBTaW5nbGUgc2NvcGUgPSBubyB0YWIgc3dpdGNoaW5nXG4gICAgICAgICAgaWYgKGVuYWJsZWRTY29wZXMubGVuZ3RoIDw9IDEpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIGlmIChtYXRjaGVzS2V5KGRhdGEsIEtleS50YWIpIHx8IG1hdGNoZXNLZXkoZGF0YSwgS2V5LnNoaWZ0KFwidGFiXCIpKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZW5hYmxlZFNjb3Blcy5pbmRleE9mKGFjdGl2ZVNjb3BlKTtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IG1hdGNoZXNLZXkoZGF0YSwgS2V5LnNoaWZ0KFwidGFiXCIpKSA/IC0xIDogMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICAgICAgICAgIChjdXJyZW50SW5kZXggKyBkaXJlY3Rpb24gKyBlbmFibGVkU2NvcGVzLmxlbmd0aCkgJVxuICAgICAgICAgICAgICBlbmFibGVkU2NvcGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGFjdGl2ZVNjb3BlID0gZW5hYmxlZFNjb3Blc1tuZXh0SW5kZXhdIGFzIFNjb3BlO1xuICAgICAgICAgICAgc2V0dGluZ3MgPSBidWlsZFNldHRpbmdzQ29tcG9uZW50KGFjdGl2ZVNjb3BlKTtcbiAgICAgICAgICAgIHR1aS5yZXF1ZXN0UmVuZGVyKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIEluaXQgLS0tXG5cbiAgICAgICAgc2V0dGluZ3MgPSBidWlsZFNldHRpbmdzQ29tcG9uZW50KGFjdGl2ZVNjb3BlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlbmRlcih3aWR0aDogbnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2godGhlbWUuZmcoXCJhY2NlbnRcIiwgdGhlbWUuYm9sZCh0aXRsZSkpKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goLi4ucmVuZGVyVGFicygpKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goLi4uKHNldHRpbmdzPy5yZW5kZXIod2lkdGgpID8/IFtdKSk7XG4gICAgICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICAgICAgc2V0dGluZ3M/LmludmFsaWRhdGU/LigpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFuZGxlSW5wdXQoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBDdHJsK1M6IHNhdmUgYWxsIGRpcnR5IHRhYnMuXG4gICAgICAgICAgICBpZiAobWF0Y2hlc0tleShkYXRhLCBLZXkuY3RybChcInNcIikpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0RpcnR5KCkpIHZvaWQgc2F2ZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2V0dGluZ3M/Lmhhc0FjdGl2ZVN1Ym1lbnUoKSAmJiBoYW5kbGVUYWJTd2l0Y2goZGF0YSkpIHJldHVybjtcbiAgICAgICAgICAgIHNldHRpbmdzPy5oYW5kbGVJbnB1dD8uKGRhdGEpO1xuICAgICAgICAgICAgdHVpLnJlcXVlc3RSZW5kZXIoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDcyNDExMzJ9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChiYXNoKSJ9LCJpZCI6Ijc1Y2Y5MjE0IiwicGFyZW50SWQiOiIwNjgyNjhhMCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTQ6MDUuMTQ3WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjE5OTc1MmQyIiwicGFyZW50SWQiOiI3NWNmOTIxNCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTQ6MDUuMTQ4WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ik5vdyBsZXQgbWUgY2hlY2sgd2hhdCBwcm92aWRlcnMgUGkga25vd3MgYWJvdXQgbmF0aXZlbHkgKHRvIHBvcHVsYXRlIHRoZSBmdXp6eSBzZWxlY3Rvcik6In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxRWU5RERrUjJySGdpRXdjR1Y2ejlCeSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJncmVwIC1yIFwicmVnaXN0ZXJQcm92aWRlclxcfHByb3ZpZGVyLipuYW1lXCIgL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL3Byb3ZpZGVycy8gLS1pbmNsdWRlPVwiKi50c1wiIC1sIHwgaGVhZCAtNSJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0IjoxMjIsImNhY2hlUmVhZCI6MzQ3NjEsImNhY2hlV3JpdGUiOjMyMjUsInRvdGFsVG9rZW5zIjozODEwOSwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDMwNSwiY2FjaGVSZWFkIjowLjAxNzM4MDUsImNhY2hlV3JpdGUiOjAuMDIwMTU2MjUsInRvdGFsIjowLjA0MDU5MTc0OTk5OTk5OTk5Nn19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzI0MTE0MX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijg0MDIyZmI5IiwicGFyZW50SWQiOiIxOTk3NTJkMiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTQ6MDUuMTcxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFFZTlERGtSMnJIZ2lFd2NHVjZ6OUJ5IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL3Byb3ZpZGVycy9ob29rcy91c2FnZS1iYXIudHNcbi9Vc2Vycy9hbGlvdWRpYWxsby9jb2RlL3NyYy9naXRodWIuY29tL2FsaW91L3BpLWV4dGVuc2lvbnMvZXh0ZW5zaW9ucy9wcm92aWRlcnMvY29tbWFuZHMvc2V0dGluZ3MtY29tbWFuZC50c1xuL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktZXh0ZW5zaW9ucy9leHRlbnNpb25zL3Byb3ZpZGVycy9jb21tYW5kcy9pbmRleC50c1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MjQ1MTcwfX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSAoc2NvdXQpIn0sImlkIjoiYjIyNzkwMmYiLCJwYXJlbnRJZCI6Ijg0MDIyZmI5IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NDowOS4yMjJaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYmUxMmM0MzgiLCJwYXJlbnRJZCI6ImIyMjc5MDJmIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NDowOS4yMjRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMVd4NUtMOEVramRVV2V3YTQxdVVhSHQiLCJuYW1lIjoic2NvdXQiLCJhcmd1bWVudHMiOnsicHJvbXB0IjoiV2hhdCBwcm92aWRlcnMgYXJlIHN1cHBvcnRlZD8gTG9vayBhdCB0aGUgYnVpbHQtaW4gcHJvdmlkZXIgbmFtZXMgcmVnaXN0ZXJlZCBpbiBwaS4iLCJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInF1ZXJ5IjoicmVnaXN0ZXJQcm92aWRlciBwcm92aWRlciBuYW1lIGxpc3QifX1dLCJhcGkiOiJhbnRocm9waWMtbWVzc2FnZXMiLCJwcm92aWRlciI6ImFudGhyb3BpYyIsIm1vZGVsIjoiY2xhdWRlLW9wdXMtNC02IiwidXNhZ2UiOnsiaW5wdXQiOjEsIm91dHB1dCI6MTEwLCJjYWNoZVJlYWQiOjM3OTg2LCJjYWNoZVdyaXRlIjoyMzYsInRvdGFsVG9rZW5zIjozODMzMywiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDI3NTAwMDAwMDAwMDAwMDAzLCJjYWNoZVJlYWQiOjAuMDE4OTkzLCJjYWNoZVdyaXRlIjowLjAwMTQ3NSwidG90YWwiOjAuMDIzMjIzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3MjQ1MTcxfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiOTJjNTU1ZDUiLCJwYXJlbnRJZCI6ImJlMTJjNDM4IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NTowNC40MjBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVd4NUtMOEVramRVV2V3YTQxdVVhSHQiLCJ0b29sTmFtZSI6InNjb3V0IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiUGVyZmVjdCEgTm93IEkgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSBhbnN3ZXIuIExldCBtZSBjb21waWxlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBwcm92aWRlcnMuXG5cbiMjIFN1bW1hcnlcblxuQmFzZWQgb24gbXkgZXhwbG9yYXRpb24gb2YgdGhlICoqYmFkbG9naWMvcGktbW9ubyoqIHJlcG9zaXRvcnksIGhlcmUgYXJlIGFsbCB0aGUgKipidWlsdC1pbiBwcm92aWRlcnMqKiBzdXBwb3J0ZWQgYnkgcGk6XG5cbiMjIyBCdWlsdC1pbiBQcm92aWRlcnMgKDIyIHRvdGFsKVxuXG5UaGUgY29tcGxldGUgbGlzdCBvZiBgS25vd25Qcm92aWRlcmAgdHlwZXMgZGVmaW5lZCBpbiBbYHBhY2thZ2VzL2FpL3NyYy90eXBlcy50c2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvdHlwZXMudHMjTDE0LUwzNik6XG5cbjEuICoqYGFtYXpvbi1iZWRyb2NrYCoqIC0gQVdTIEJlZHJvY2sgKEFudGhyb3BpYywgTWV0YSBtb2RlbHMpXG4yLiAqKmBhbnRocm9waWNgKiogLSBBbnRocm9waWMgKENsYXVkZSBtb2RlbHMpXG4zLiAqKmBnb29nbGVgKiogLSBHb29nbGUgR2VuZXJhdGl2ZSBBSSAoR2VtaW5pIG1vZGVscylcbjQuICoqYGdvb2dsZS1nZW1pbmktY2xpYCoqIC0gR29vZ2xlIENsb3VkIENvZGUgQXNzaXN0IChPQXV0aCByZXF1aXJlZClcbjUuICoqYGdvb2dsZS1hbnRpZ3Jhdml0eWAqKiAtIEdvb2dsZSBBbnRpZ3Jhdml0eSAoRnJlZS9wYWlkIEdlbWluaSwgQ2xhdWRlLCBHUFQtT1NTKVxuNi4gKipgZ29vZ2xlLXZlcnRleGAqKiAtIEdvb2dsZSBWZXJ0ZXggQUlcbjcuICoqYG9wZW5haWAqKiAtIE9wZW5BSSAoR1BUIG1vZGVscylcbjguICoqYGF6dXJlLW9wZW5haS1yZXNwb25zZXNgKiogLSBBenVyZSBPcGVuQUlcbjkuICoqYG9wZW5haS1jb2RleGAqKiAtIE9wZW5BSSBDb2RleCAocmVxdWlyZXMgT0F1dGgpXG4xMC4gKipgZ2l0aHViLWNvcGlsb3RgKiogLSBHaXRIdWIgQ29waWxvdCAocmVxdWlyZXMgT0F1dGgpXG4xMS4gKipgeGFpYCoqIC0geEFJIChHcm9rIG1vZGVscylcbjEyLiAqKmBncm9xYCoqIC0gR3JvcVxuMTMuICoqYGNlcmVicmFzYCoqIC0gQ2VyZWJyYXNcbjE0LiAqKmBvcGVucm91dGVyYCoqIC0gT3BlblJvdXRlciAocm91dGluZyBzZXJ2aWNlKVxuMTUuICoqYHZlcmNlbC1haS1nYXRld2F5YCoqIC0gVmVyY2VsIEFJIEdhdGV3YXlcbjE2LiAqKmB6YWlgKiogLSB6QUlcbjE3LiAqKmBtaXN0cmFsYCoqIC0gTWlzdHJhbFxuMTguICoqYG1pbmltYXhgKiogLSBNaW5pTWF4XG4xOS4gKipgbWluaW1heC1jbmAqKiAtIE1pbmlNYXggKENoaW5hKVxuMjAuICoqYGh1Z2dpbmdmYWNlYCoqIC0gSHVnZ2luZyBGYWNlXG4yMS4gKipgb3BlbmNvZGVgKiogLSBPcGVuQ29kZSBaZW5cbjIyLiAqKmBraW1pLWNvZGluZ2AqKiAtIEtpbWkgRm9yIENvZGluZyAoTW9vbnNob3QgQUkpXG5cbiMjIyBCdWlsdC1pbiBBUElzXG5cblRoZSB1bmRlcmx5aW5nIEFQSSBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJlZCBpbiBbYHBhY2thZ2VzL2FpL3NyYy9wcm92aWRlcnMvcmVnaXN0ZXItYnVpbHRpbnMudHNgXShodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycy9yZWdpc3Rlci1idWlsdGlucy50cyk6XG5cbjEuICoqYGFudGhyb3BpYy1tZXNzYWdlc2AqKiAtIEFudGhyb3BpYyBNZXNzYWdlcyBBUElcbjIuICoqYG9wZW5haS1jb21wbGV0aW9uc2AqKiAtIE9wZW5BSSBDaGF0IENvbXBsZXRpb25zIChtb3N0IGNvbXBhdGlibGUpXG4zLiAqKmBvcGVuYWktcmVzcG9uc2VzYCoqIC0gT3BlbkFJIFJlc3BvbnNlcyBBUElcbjQuICoqYGF6dXJlLW9wZW5haS1yZXNwb25zZXNgKiogLSBBenVyZSBPcGVuQUkgUmVzcG9uc2VzIEFQSVxuNS4gKipgb3BlbmFpLWNvZGV4LXJlc3BvbnNlc2AqKiAtIE9wZW5BSSBDb2RleCBSZXNwb25zZXMgQVBJXG42LiAqKmBnb29nbGUtZ2VuZXJhdGl2ZS1haWAqKiAtIEdvb2dsZSBHZW5lcmF0aXZlIEFJIEFQSVxuNy4gKipgZ29vZ2xlLWdlbWluaS1jbGlgKiogLSBHb29nbGUgR2VtaW5pIENMSSBBUElcbjguICoqYGdvb2dsZS12ZXJ0ZXhgKiogLSBHb29nbGUgVmVydGV4IEFJIEFQSVxuOS4gKipgYmVkcm9jay1jb252ZXJzZS1zdHJlYW1gKiogLSBBbWF6b24gQmVkcm9jayBDb252ZXJzZSBBUElcblxuIyMjIFByb3ZpZGVyIFJlZ2lzdHJhdGlvblxuXG5Qcm92aWRlcnMgY2FuIGJlIHJlZ2lzdGVyZWQgZHluYW1pY2FsbHkgdXNpbmcgdGhlIGByZWdpc3RlclByb3ZpZGVyKClgIG1ldGhvZCBpbiB0aGUgW2BNb2RlbFJlZ2lzdHJ5YF0oaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50cyNMMjQzLUwzMjIpIGNsYXNzOlxuXG5gYGB0eXBlc2NyaXB0XG5tb2RlbFJlZ2lzdHJ5LnJlZ2lzdGVyUHJvdmlkZXIocHJvdmlkZXJOYW1lLCB7XG4gIGJhc2VVcmw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScsXG4gIGFwaUtleTogJ3NrLS4uLicsXG4gIG1vZGVsczogWy8qIGN1c3RvbSBtb2RlbHMgKi9dLFxuICBvYXV0aDogeyAvKiBPQXV0aCBjb25maWcgKi8gfVxufSk7XG5gYGBcblxuIyMjIEN1c3RvbSBQcm92aWRlcnNcblxuVXNlcnMgY2FuIGFkZCBjdXN0b20gcHJvdmlkZXJzIHZpYTpcbi0gKipgbW9kZWxzLmpzb25gKiogLSBGb3IgT3BlbkFJLWNvbXBhdGlibGUgQVBJcyAoT2xsYW1hLCB2TExNLCBMTSBTdHVkaW8pXG4tICoqRXh0ZW5zaW9ucyoqIC0gRm9yIGN1c3RvbSBBUEkgaW1wbGVtZW50YXRpb25zIG9yIE9BdXRoIGZsb3dzXG5cblNlZSBbY3VzdG9tLXByb3ZpZGVyLm1kXShodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kKSBmb3IgZGV0YWlscy4ifV0sImRldGFpbHMiOnsiX3JlbmRlcktleSI6InRvb2x1XzAxV3g1S0w4RWtqZFVXZXdhNDF1VWFIdCIsInF1ZXJ5IjoicmVnaXN0ZXJQcm92aWRlciBwcm92aWRlciBuYW1lIGxpc3QiLCJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInByb21wdCI6IldoYXQgcHJvdmlkZXJzIGFyZSBzdXBwb3J0ZWQ/IExvb2sgYXQgdGhlIGJ1aWx0LWluIHByb3ZpZGVyIG5hbWVzIHJlZ2lzdGVyZWQgaW4gcGkuIiwic2tpbGxzUmVzb2x2ZWQiOjAsInRvb2xDYWxscyI6W3sidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFSaHk5OG9IUUZZU3lCaGtRMVI5UWJTIiwidG9vbE5hbWUiOiJnaXRodWJfc2VhcmNoIiwiYXJncyI6eyJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInF1ZXJ5IjoicmVnaXN0ZXJQcm92aWRlciJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjUyMTU2LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBDb2RlIFNlYXJjaCBSZXN1bHRzXG5cbioqUXVlcnk6KiogYHJlZ2lzdGVyUHJvdmlkZXJgXG4qKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuKipUb3RhbCBSZXN1bHRzOioqIDExXG5cbiMjIFJlc3VsdHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3R5cGVzLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3R5cGVzLnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvbW9kZWwtcmVnaXN0cnkudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL21vZGVsLXJlZ2lzdHJ5LnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvZXh0ZW5zaW9ucy9sb2FkZXIudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvbG9hZGVyLnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9jdXN0b20tcHJvdmlkZXIubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9leHRlbnNpb25zLm1kXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2V4dGVuc2lvbnMubWRcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9DSEFOR0VMT0cubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L0NIQU5HRUxPRy5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9tYWluLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvbWFpbi50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvcnVubmVyLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3J1bm5lci50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLXF3ZW4tY2xpL2luZGV4LnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1xd2VuLWNsaS9pbmRleC50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWdpdGxhYi1kdW8vaW5kZXgudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWdpdGxhYi1kdW8vaW5kZXgudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1hbnRocm9waWMvaW5kZXgudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWFudGhyb3BpYy9pbmRleC50c1xuXG4ifV0sImRldGFpbHMiOnsicXVlcnkiOiJyZWdpc3RlclByb3ZpZGVyIiwicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI1MjE1MywiZW5kZWRBdCI6MTc3MTM0NzI1MjYyNywiZHVyYXRpb25NcyI6NDc0fX19fSwiZW5kZWRBdCI6MTc3MTM0NzI1MjYzMSwiZHVyYXRpb25NcyI6NDc1fSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxOWhGSk5mZ1drRnhRZ3k1M1JRdFJpTCIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDcyNTI2MzIsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIGJhZGxvZ2ljL3BpLW1vbm9cblxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kc1xuXG4jIyBSZXBvc2l0b3J5IEluZm9cblxuLSAqKlN0YXJzOioqIDEzMDkxXG4tICoqRm9ya3M6KiogMTMxNFxuLSAqKkxhbmd1YWdlOioqIFR5cGVTY3JpcHRcbi0gKipMaWNlbnNlOioqIE1JVCBMaWNlbnNlXG4tICoqRGVmYXVsdCBCcmFuY2g6KiogbWFpblxuLSAqKk9wZW4gSXNzdWVzOioqIDdcblxuIyMgUkVBRE1FXG5cbiMg8J+Plu+4jyBPU1MgVmFjYXRpb25cblxuKipJc3N1ZSB0cmFja2VyIGFuZCBQUnMgcmVvcGVuIEZlYnJ1YXJ5IDIzLCAyMDI2LioqXG5cbkFsbCBQUnMgd2lsbCBiZSBhdXRvLWNsb3NlZCB1bnRpbCB0aGVuLiBBcHByb3ZlZCBjb250cmlidXRvcnMgY2FuIHN1Ym1pdCBQUnMgYWZ0ZXIgdmFjYXRpb24gd2l0aG91dCByZWFwcHJvdmFsLiBGb3Igc3VwcG9ydCwgam9pbiBbRGlzY29yZF0oaHR0cHM6Ly9kaXNjb3JkLmNvbS9pbnZpdGUvM2NVN0J6NFVQeCkuXG5cbi0tLVxuXG48cCBhbGlnbj1cImNlbnRlclwiPlxuICA8YSBocmVmPVwiaHR0cHM6Ly9zaGl0dHljb2RpbmdhZ2VudC5haVwiPlxuICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9zaGl0dHljb2RpbmdhZ2VudC5haS9sb2dvLnN2Z1wiIGFsdD1cInBpIGxvZ29cIiB3aWR0aD1cIjEyOFwiPlxuICA8L2E+XG48L3A+XG48cCBhbGlnbj1cImNlbnRlclwiPlxuICA8YSBocmVmPVwiaHR0cHM6Ly9kaXNjb3JkLmNvbS9pbnZpdGUvM2NVN0J6NFVQeFwiPjxpbWcgYWx0PVwiRGlzY29yZFwiIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvZGlzY29yZC1jb21tdW5pdHktNTg2NUYyP3N0eWxlPWZsYXQtc3F1YXJlJmxvZ289ZGlzY29yZCZsb2dvQ29sb3I9d2hpdGVcIiAvPjwvYT5cbiAgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbFwiPjxpbWcgYWx0PVwiQnVpbGQgc3RhdHVzXCIgc3JjPVwiaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvYWN0aW9ucy93b3JrZmxvdy9zdGF0dXMvYmFkbG9naWMvcGktbW9uby9jaS55bWw/c3R5bGU9ZmxhdC1zcXVhcmUmYnJhbmNoPW1haW5cIiAvPjwvYT5cbjwvcD5cbjxwIGFsaWduPVwiY2VudGVyXCI+XG4gIDxhIGhyZWY9XCJodHRwczovL3BpLmRldlwiPnBpLmRldjwvYT4gZG9tYWluIGdyYWNpb3VzbHkgZG9uYXRlZCBieVxuICA8YnIgLz48YnIgLz5cbiAgPGEgaHJlZj1cImh0dHBzOi8vZXhlLmRldlwiPjxpbWcgc3JjPVwicGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvaW1hZ2VzL2V4eS5wbmdcIiBhbHQ9XCJFeHkgbWFzY290XCIgd2lkdGg9XCI0OFwiIC8+PGJyIC8+ZXhlLmRldjwvYT5cbjwvcD5cblxuIyBQaSBNb25vcmVwb1xuXG4+ICoqTG9va2luZyBmb3IgdGhlIHBpIGNvZGluZyBhZ2VudD8qKiBTZWUgKipbcGFja2FnZXMvY29kaW5nLWFnZW50XShwYWNrYWdlcy9jb2RpbmctYWdlbnQpKiogZm9yIGluc3RhbGxhdGlvbiBhbmQgdXNhZ2UuXG5cblRvb2xzIGZvciBidWlsZGluZyBBSSBhZ2VudHMgYW5kIG1hbmFnaW5nIExMTSBkZXBsb3ltZW50cy5cblxuIyMgUGFja2FnZXNcblxufCBQYWNrYWdlIHwgRGVzY3JpcHRpb24gfFxufC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLWFpXShwYWNrYWdlcy9haSkqKiB8IFVuaWZpZWQgbXVsdGktcHJvdmlkZXIgTExNIEFQSSAoT3BlbkFJLCBBbnRocm9waWMsIEdvb2dsZSwgZXRjLikgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLWFnZW50LWNvcmVdKHBhY2thZ2VzL2FnZW50KSoqIHwgQWdlbnQgcnVudGltZSB3aXRoIHRvb2wgY2FsbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCB8XG58ICoqW0BtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XShwYWNrYWdlcy9jb2RpbmctYWdlbnQpKiogfCBJbnRlcmFjdGl2ZSBjb2RpbmcgYWdlbnQgQ0xJIHxcbnwgKipbQG1hcmlvemVjaG5lci9waS1tb21dKHBhY2thZ2VzL21vbSkqKiB8IFNsYWNrIGJvdCB0aGF0IGRlbGVnYXRlcyBtZXNzYWdlcyB0byB0aGUgcGkgY29kaW5nIGFnZW50IHxcbnwgKipbQG1hcmlvemVjaG5lci9waS10dWldKHBhY2thZ2VzL3R1aSkqKiB8IFRlcm1pbmFsIFVJIGxpYnJhcnkgd2l0aCBkaWZmZXJlbnRpYWwgcmVuZGVyaW5nIHxcbnwgKipbQG1hcmlvemVjaG5lci9waS13ZWItdWldKHBhY2thZ2VzL3dlYi11aSkqKiB8IFdlYiBjb21wb25lbnRzIGZvciBBSSBjaGF0IGludGVyZmFjZXMgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLXBvZHNdKHBhY2thZ2VzL3BvZHMpKiogfCBDTEkgZm9yIG1hbmFnaW5nIHZMTE0gZGVwbG95bWVudHMgb24gR1BVIHBvZHMgfFxuXG4jIyBDb250cmlidXRpbmdcblxuU2VlIFtDT05UUklCVVRJTkcubWRdKENPTlRSSUJVVElORy5tZCkgZm9yIGNvbnRyaWJ1dGlvbiBndWlkZWxpbmVzIGFuZCBbQUdFTlRTLm1kXShBR0VOVFMubWQpIGZvciBwcm9qZWN0LXNwZWNpZmljIHJ1bGVzIChmb3IgYm90aCBodW1hbnMgYW5kIGFnZW50cykuXG5cbiMjIERldmVsb3BtZW50XG5cbmBgYGJhc2hcbm5wbSBpbnN0YWxsICAgICAgICAgICMgSW5zdGFsbCBhbGwgZGVwZW5kZW5jaWVzXG5ucG0gcnVuIGJ1aWxkICAgICAgICAjIEJ1aWxkIGFsbCBwYWNrYWdlc1xubnBtIHJ1biBjaGVjayAgICAgICAgIyBMaW50LCBmb3JtYXQsIGFuZCB0eXBlIGNoZWNrXG4uL3Rlc3Quc2ggICAgICAgICAgICAjIFJ1biB0ZXN0cyAoc2tpcHMgTExNLWRlcGVuZGVudCB0ZXN0cyB3aXRob3V0IEFQSSBrZXlzKVxuLi9waS10ZXN0LnNoICAgICAgICAgIyBSdW4gcGkgZnJvbSBzb3VyY2VzIChtdXN0IGJlIHJ1biBmcm9tIHJlcG8gcm9vdClcbmBgYFxuXG4+ICoqTm90ZToqKiBgbnBtIHJ1biBjaGVja2AgcmVxdWlyZXMgYG5wbSBydW4gYnVpbGRgIHRvIGJlIHJ1biBmaXJzdC4gVGhlIHdlYi11aSBwYWNrYWdlIHVzZXMgYHRzY2Agd2hpY2ggbmVlZHMgY29tcGlsZWQgYC5kLnRzYCBmaWxlcyBmcm9tIGRlcGVuZGVuY2llcy5cblxuIyMgTGljZW5zZVxuXG5NSVRcbiMjIFJlcG9zaXRvcnkgU3RydWN0dXJlXG5cbi0gW2RdIC5naXRodWJcbi0gW2ZdIC5naXRpZ25vcmVcbi0gW2RdIC5odXNreVxuLSBbZF0gLnBpXG4tIFtmXSBBR0VOVFMubWRcbi0gW2ZdIENPTlRSSUJVVElORy5tZFxuLSBbZl0gTElDRU5TRVxuLSBbZl0gUkVBRE1FLm1kXG4tIFtmXSBiaW9tZS5qc29uXG4tIFtmXSBwYWNrYWdlLWxvY2suanNvblxuLSBbZl0gcGFja2FnZS5qc29uXG4tIFtkXSBwYWNrYWdlc1xuLSBbZl0gcGktbW9uby5jb2RlLXdvcmtzcGFjZVxuLSBbZl0gcGktdGVzdC5zaFxuLSBbZF0gc2NyaXB0c1xuLSBbZl0gdGVzdC5zaFxuLSBbZl0gdHNjb25maWcuYmFzZS5qc29uXG4tIFtmXSB0c2NvbmZpZy5qc29uXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6bnVsbCwicmVmIjpudWxsLCJjb250ZW50VHlwZSI6InJlcG8iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI1MjYzMCwiZW5kZWRBdCI6MTc3MTM0NzI1MzM0OCwiZHVyYXRpb25NcyI6NzE4fX19fSwiZW5kZWRBdCI6MTc3MTM0NzI1MzM0OSwiZHVyYXRpb25NcyI6NzE3fSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxTVRCWVVmM0JROEZLUXh4OUtwamYyMyIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50cyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjU5MTgyLCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBtb2RlbC1yZWdpc3RyeS50c1xuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50c2BcbioqU2l6ZToqKiAyMjg4NyBieXRlc1xuXG5gYGB0eXBlc2NyaXB0XG4vKipcbiAqIE1vZGVsIHJlZ2lzdHJ5IC0gbWFuYWdlcyBidWlsdC1pbiBhbmQgY3VzdG9tIG1vZGVscywgcHJvdmlkZXMgQVBJIGtleSByZXNvbHV0aW9uLlxuICovXG5cbmltcG9ydCB7XG5cdHR5cGUgQXBpLFxuXHR0eXBlIEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSxcblx0dHlwZSBDb250ZXh0LFxuXHRnZXRNb2RlbHMsXG5cdGdldFByb3ZpZGVycyxcblx0dHlwZSBLbm93blByb3ZpZGVyLFxuXHR0eXBlIE1vZGVsLFxuXHR0eXBlIE9BdXRoUHJvdmlkZXJJbnRlcmZhY2UsXG5cdHR5cGUgT3BlbkFJQ29tcGxldGlvbnNDb21wYXQsXG5cdHR5cGUgT3BlbkFJUmVzcG9uc2VzQ29tcGF0LFxuXHRyZWdpc3RlckFwaVByb3ZpZGVyLFxuXHRyZWdpc3Rlck9BdXRoUHJvdmlkZXIsXG5cdHR5cGUgU2ltcGxlU3RyZWFtT3B0aW9ucyxcbn0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktYWlcIjtcbmltcG9ydCB7IHR5cGUgU3RhdGljLCBUeXBlIH0gZnJvbSBcIkBzaW5jbGFpci90eXBlYm94XCI7XG5pbXBvcnQgQWp2TW9kdWxlIGZyb20gXCJhanZcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBnZXRBZ2VudERpciB9IGZyb20gXCIuLi9jb25maWcuanNcIjtcbmltcG9ydCB0eXBlIHsgQXV0aFN0b3JhZ2UgfSBmcm9tIFwiLi9hdXRoLXN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGNsZWFyQ29uZmlnVmFsdWVDYWNoZSwgcmVzb2x2ZUNvbmZpZ1ZhbHVlLCByZXNvbHZlSGVhZGVycyB9IGZyb20gXCIuL3Jlc29sdmUtY29uZmlnLXZhbHVlLmpzXCI7XG5cbmNvbnN0IEFqdiA9IChBanZNb2R1bGUgYXMgYW55KS5kZWZhdWx0IHx8IEFqdk1vZHVsZTtcblxuLy8gU2NoZW1hIGZvciBPcGVuUm91dGVyIHJvdXRpbmcgcHJlZmVyZW5jZXNcbmNvbnN0IE9wZW5Sb3V0ZXJSb3V0aW5nU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xuXHRvbmx5OiBUeXBlLk9wdGlvbmFsKFR5cGUuQXJyYXkoVHlwZS5TdHJpbmcoKSkpLFxuXHRvcmRlcjogVHlwZS5PcHRpb25hbChUeXBlLkFycmF5KFR5cGUuU3RyaW5nKCkpKSxcbn0pO1xuXG4vLyBTY2hlbWEgZm9yIFZlcmNlbCBBSSBHYXRld2F5IHJvdXRpbmcgcHJlZmVyZW5jZXNcbmNvbnN0IFZlcmNlbEdhdGV3YXlSb3V0aW5nU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xuXHRvbmx5OiBUeXBlLk9wdGlvbmFsKFR5cGUuQXJyYXkoVHlwZS5TdHJpbmcoKSkpLFxuXHRvcmRlcjogVHlwZS5PcHRpb25hbChUeXBlLkFycmF5KFR5cGUuU3RyaW5nKCkpKSxcbn0pO1xuXG4vLyBTY2hlbWEgZm9yIE9wZW5BSSBjb21wYXRpYmlsaXR5IHNldHRpbmdzXG5jb25zdCBPcGVuQUlDb21wbGV0aW9uc0NvbXBhdFNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcblx0c3VwcG9ydHNTdG9yZTogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXG5cdHN1cHBvcnRzRGV2ZWxvcGVyUm9sZTogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXG5cdHN1cHBvcnRzUmVhc29uaW5nRWZmb3J0OiBUeXBlLk9wdGlvbmFsKFR5cGUuQm9vbGVhbigpKSxcblx0c3VwcG9ydHNVc2FnZUluU3RyZWFtaW5nOiBUeXBlLk9wdGlvbmFsKFR5cGUuQm9vbGVhbigpKSxcblx0bWF4VG9rZW5zRmllbGQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5VbmlvbihbVHlwZS5MaXRlcmFsKFwibWF4X2NvbXBsZXRpb25fdG9rZW5zXCIpLCBUeXBlLkxpdGVyYWwoXCJtYXhfdG9rZW5zXCIpXSkpLFxuXHRyZXF1aXJlc1Rvb2xSZXN1bHROYW1lOiBUeXBlLk9wdGlvbmFsKFR5cGUuQm9vbGVhbigpKSxcblx0cmVxdWlyZXNBc3Npc3RhbnRBZnRlclRvb2xSZXN1bHQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5Cb29sZWFuKCkpLFxuXHRyZXF1aXJlc1RoaW5raW5nQXNUZXh0OiBUeXBlLk9wdGlvbmFsKFR5cGUuQm9vbGVhbigpKSxcblx0cmVxdWlyZXNNaXN0cmFsVG9vbElkczogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXG5cdHRoaW5raW5nRm9ybWF0OiBUeXBlLk9wdGlvbmFsKFR5cGUuVW5pb24oW1R5cGUuTGl0ZXJhbChcIm9wZW5haVwiKSwgVHlwZS5MaXRlcmFsKFwiemFpXCIpLCBUeXBlLkxpdGVyYWwoXCJxd2VuXCIpXSkpLFxuXHRvcGVuUm91dGVyUm91dGluZzogVHlwZS5PcHRpb25hbChPcGVuUm91dGVyUm91dGluZ1NjaGVtYSksXG5cdHZlcmNlbEdhdGV3YXlSb3V0aW5nOiBUeXBlLk9wdGlvbmFsKFZlcmNlbEdhdGV3YXlSb3V0aW5nU2NoZW1hKSxcbn0pO1xuXG5jb25zdCBPcGVuQUlSZXNwb25zZXNDb21wYXRTY2hlbWEgPSBUeXBlLk9iamVjdCh7XG5cdC8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG59KTtcblxuY29uc3QgT3BlbkFJQ29tcGF0U2NoZW1hID0gVHlwZS5VbmlvbihbT3BlbkFJQ29tcGxldGlvbnNDb21wYXRTY2hlbWEsIE9wZW5BSVJlc3BvbnNlc0NvbXBhdFNjaGVtYV0pO1xuXG4vLyBTY2hlbWEgZm9yIGN1c3RvbSBtb2RlbCBkZWZpbml0aW9uXG4vLyBNb3N0IGZpZWxkcyBhcmUgb3B0aW9uYWwgd2l0aCBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgbG9jYWwgbW9kZWxzIChPbGxhbWEsIExNIFN0dWRpbywgZXRjLilcbmNvbnN0IE1vZGVsRGVmaW5pdGlvblNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcblx0aWQ6IFR5cGUuU3RyaW5nKHsgbWluTGVuZ3RoOiAxIH0pLFxuXHRuYW1lOiBUeXBlLk9wdGlvbmFsKFR5cGUuU3RyaW5nKHsgbWluTGVuZ3RoOiAxIH0pKSxcblx0YXBpOiBUeXBlLk9wdGlvbmFsKFR5cGUuU3RyaW5nKHsgbWluTGVuZ3RoOiAxIH0pKSxcblx0cmVhc29uaW5nOiBUeXBlLk9wdGlvbmFsKFR5cGUuQm9vbGVhbigpKSxcblx0aW5wdXQ6IFR5cGUuT3B0aW9uYWwoVHlwZS5BcnJheShUeXBlLlVuaW9uKFtUeXBlLkxpdGVyYWwoXCJ0ZXh0XCIpLCBUeXBlLkxpdGVyYWwoXCJpbWFnZVwiKV0pKSksXG5cdGNvc3Q6IFR5cGUuT3B0aW9uYWwoXG5cdFx0VHlwZS5PYmplY3Qoe1xuXHRcdFx0aW5wdXQ6IFR5cGUuTnVtYmVyKCksXG5cdFx0XHRvdXRwdXQ6IFR5cGUuTnVtYmVyKCksXG5cdFx0XHRjYWNoZVJlYWQ6IFR5cGUuTnVtYmVyKCksXG5cdFx0XHRjYWNoZVdyaXRlOiBUeXBlLk51bWJlcigpLFxuXHRcdH0pLFxuXHQpLFxuXHRjb250ZXh0V2luZG93OiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxuXHRtYXhUb2tlbnM6IFR5cGUuT3B0aW9uYWwoVHlwZS5OdW1iZXIoKSksXG5cdGhlYWRlcnM6IFR5cGUuT3B0aW9uYWwoVHlwZS5SZWNvcmQoVHlwZS5TdHJpbmcoKSwgVHlwZS5TdHJpbmcoKSkpLFxuXHRjb21wYXQ6IFR5cGUuT3B0aW9uYWwoT3BlbkFJQ29tcGF0U2NoZW1hKSxcbn0pO1xuXG4vLyBTY2hlbWEgZm9yIHBlci1tb2RlbCBvdmVycmlkZXMgKGFsbCBmaWVsZHMgb3B0aW9uYWwsIG1lcmdlZCB3aXRoIGJ1aWx0LWluIG1vZGVsKVxuY29uc3QgTW9kZWxPdmVycmlkZVNjaGVtYSA9IFR5cGUuT2JqZWN0KHtcblx0bmFtZTogVHlwZS5PcHRpb25hbChUeXBlLlN0cmluZyh7IG1pbkxlbmd0aDogMSB9KSksXG5cdHJlYXNvbmluZzogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXG5cdGlucHV0OiBUeXBlLk9wdGlvbmFsKFR5cGUuQXJyYXkoVHlwZS5VbmlvbihbVHlwZS5MaXRlcmFsKFwidGV4dFwiKSwgVHlwZS5MaXRlcmFsKFwiaW1hZ2VcIildKSkpLFxuXHRjb3N0OiBUeXBlLk9wdGlvbmFsKFxuXHRcdFR5cGUuT2JqZWN0KHtcblx0XHRcdGlucHV0OiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxuXHRcdFx0b3V0cHV0OiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxuXHRcdFx0Y2FjaGVSZWFkOiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxuXHRcdFx0Y2FjaGVXcml0ZTogVHlwZS5PcHRpb25hbChUeXBlLk51bWJlcigpKSxcblx0XHR9KSxcblx0KSxcblx0Y29udGV4dFdpbmRvdzogVHlwZS5PcHRpb25hbChUeXBlLk51bWJlcigpKSxcblx0bWF4VG9rZW5zOiBUeXBlLk9wdGlvbmFsKFR5cGUuTnVtYmVyKCkpLFxuXHRoZWFkZXJzOiBUeXBlLk9wdGlvbmFsKFR5cGUuUmVjb3JkKFR5cGUuU3RyaW5nKCksIFR5cGUuU3RyaW5nKCkpKSxcblx0Y29tcGF0OiBUeXBlLk9wdGlvbmFsKE9wZW5BSUNvbXBhdFNjaGVtYSksXG59KTtcblxudHlwZSBNb2RlbE92ZXJyaWRlID0gU3RhdGljPHR5cGVvZiBNb2RlbE92ZXJyaWRlU2NoZW1hPjtcblxuY29uc3QgUHJvdmlkZXJDb25maWdTY2hlbWEgPSBUeXBlLk9iamVjdCh7XG5cdGJhc2VVcmw6IFR5cGUuT3B0aW9uYWwoVHlwZS5TdHJpbmcoeyBtaW5MZW5ndGg6IDEgfSkpLFxuXHRhcGlLZXk6IFR5cGUuT3B0aW9uYWwoVHlwZS5TdHJpbmcoeyBtaW5MZW5ndGg6IDEgfSkpLFxuXHRhcGk6IFR5cGUuT3B0aW9uYWwoVHlwZS5TdHJpbmcoeyBtaW5MZW5ndGg6IDEgfSkpLFxuXHRoZWFkZXJzOiBUeXBlLk9wdGlvbmFsKFR5cGUuUmVjb3JkKFR5cGUuU3RyaW5nKCksIFR5cGUuU3RyaW5nKCkpKSxcblx0YXV0aEhlYWRlcjogVHlwZS5PcHRpb25hbChUeXBlLkJvb2xlYW4oKSksXG5cdG1vZGVsczogVHlwZS5PcHRpb25hbChUeXBlLkFycmF5KE1vZGVsRGVmaW5pdGlvblNjaGVtYSkpLFxuXHRtb2RlbE92ZXJyaWRlczogVHlwZS5PcHRpb25hbChUeXBlLlJlY29yZChUeXBlLlN0cmluZygpLCBNb2RlbE92ZXJyaWRlU2NoZW1hKSksXG59KTtcblxuY29uc3QgTW9kZWxzQ29uZmlnU2NoZW1hID0gVHlwZS5PYmplY3Qoe1xuXHRwcm92aWRlcnM6IFR5cGUuUmVjb3JkKFR5cGUuU3RyaW5nKCksIFByb3ZpZGVyQ29uZmlnU2NoZW1hKSxcbn0pO1xuXG50eXBlIE1vZGVsc0NvbmZpZyA9IFN0YXRpYzx0eXBlb2YgTW9kZWxzQ29uZmlnU2NoZW1hPjtcblxuLyoqIFByb3ZpZGVyIG92ZXJyaWRlIGNvbmZpZyAoYmFzZVVybCwgaGVhZGVycywgYXBpS2V5KSB3aXRob3V0IGN1c3RvbSBtb2RlbHMgKi9cbmludGVyZmFjZSBQcm92aWRlck92ZXJyaWRlIHtcblx0YmFzZVVybD86IHN0cmluZztcblx0aGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdGFwaUtleT86IHN0cmluZztcbn1cblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGN1c3RvbSBtb2RlbHMgZnJvbSBtb2RlbHMuanNvbiAqL1xuaW50ZXJmYWNlIEN1c3RvbU1vZGVsc1Jlc3VsdCB7XG5cdG1vZGVsczogTW9kZWw8QXBpPltdO1xuXHQvKiogUHJvdmlkZXJzIHdpdGggYmFzZVVybC9oZWFkZXJzL2FwaUtleSBvdmVycmlkZXMgZm9yIGJ1aWx0LWluIG1vZGVscyAqL1xuXHRvdmVycmlkZXM6IE1hcDxzdHJpbmcsIFByb3ZpZGVyT3ZlcnJpZGU+O1xuXHQvKiogUGVyLW1vZGVsIG92ZXJyaWRlczogcHJvdmlkZXIgLT4gbW9kZWxJZCAtPiBvdmVycmlkZSAqL1xuXHRtb2RlbE92ZXJyaWRlczogTWFwPHN0cmluZywgTWFwPHN0cmluZywgTW9kZWxPdmVycmlkZT4+O1xuXHRlcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBlbXB0eUN1c3RvbU1vZGVsc1Jlc3VsdChlcnJvcj86IHN0cmluZyk6IEN1c3RvbU1vZGVsc1Jlc3VsdCB7XG5cdHJldHVybiB7IG1vZGVsczogW10sIG92ZXJyaWRlczogbmV3IE1hcCgpLCBtb2RlbE92ZXJyaWRlczogbmV3IE1hcCgpLCBlcnJvciB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZUNvbXBhdChcblx0YmFzZUNvbXBhdDogTW9kZWw8QXBpPltcImNvbXBhdFwiXSxcblx0b3ZlcnJpZGVDb21wYXQ6IE1vZGVsT3ZlcnJpZGVbXCJjb21wYXRcIl0sXG4pOiBNb2RlbDxBcGk+W1wiY29tcGF0XCJdIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFvdmVycmlkZUNvbXBhdCkgcmV0dXJuIGJhc2VDb21wYXQ7XG5cblx0Y29uc3QgYmFzZSA9IGJhc2VDb21wYXQgYXMgT3BlbkFJQ29tcGxldGlvbnNDb21wYXQgfCBPcGVuQUlSZXNwb25zZXNDb21wYXQgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVDb21wYXQgYXMgT3BlbkFJQ29tcGxldGlvbnNDb21wYXQgfCBPcGVuQUlSZXNwb25zZXNDb21wYXQ7XG5cdGNvbnN0IG1lcmdlZCA9IHsgLi4uYmFzZSwgLi4ub3ZlcnJpZGUgfSBhcyBPcGVuQUlDb21wbGV0aW9uc0NvbXBhdCB8IE9wZW5BSVJlc3BvbnNlc0NvbXBhdDtcblxuXHRjb25zdCBiYXNlQ29tcGxldGlvbnMgPSBiYXNlIGFzIE9wZW5BSUNvbXBsZXRpb25zQ29tcGF0IHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvdmVycmlkZUNvbXBsZXRpb25zID0gb3ZlcnJpZGUgYXMgT3BlbkFJQ29tcGxldGlvbnNDb21wYXQ7XG5cdGNvbnN0IG1lcmdlZENvbXBsZXRpb25zID0gbWVyZ2VkIGFzIE9wZW5BSUNvbXBsZXRpb25zQ29tcGF0O1xuXG5cdGlmIChiYXNlQ29tcGxldGlvbnM/Lm9wZW5Sb3V0ZXJSb3V0aW5nIHx8IG92ZXJyaWRlQ29tcGxldGlvbnMub3BlblJvdXRlclJvdXRpbmcpIHtcblx0XHRtZXJnZWRDb21wbGV0aW9ucy5vcGVuUm91dGVyUm91dGluZyA9IHtcblx0XHRcdC4uLmJhc2VDb21wbGV0aW9ucz8ub3BlblJvdXRlclJvdXRpbmcsXG5cdFx0XHQuLi5vdmVycmlkZUNvbXBsZXRpb25zLm9wZW5Sb3V0ZXJSb3V0aW5nLFxuXHRcdH07XG5cdH1cblxuXHRpZiAoYmFzZUNvbXBsZXRpb25zPy52ZXJjZWxHYXRld2F5Um91dGluZyB8fCBvdmVycmlkZUNvbXBsZXRpb25zLnZlcmNlbEdhdGV3YXlSb3V0aW5nKSB7XG5cdFx0bWVyZ2VkQ29tcGxldGlvbnMudmVyY2VsR2F0ZXdheVJvdXRpbmcgPSB7XG5cdFx0XHQuLi5iYXNlQ29tcGxldGlvbnM/LnZlcmNlbEdhdGV3YXlSb3V0aW5nLFxuXHRcdFx0Li4ub3ZlcnJpZGVDb21wbGV0aW9ucy52ZXJjZWxHYXRld2F5Um91dGluZyxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIG1lcmdlZCBhcyBNb2RlbDxBcGk+W1wiY29tcGF0XCJdO1xufVxuXG4vKipcbiAqIERlZXAgbWVyZ2UgYSBtb2RlbCBvdmVycmlkZSBpbnRvIGEgbW9kZWwuXG4gKiBIYW5kbGVzIG5lc3RlZCBvYmplY3RzIChjb3N0LCBjb21wYXQpIGJ5IG1lcmdpbmcgcmF0aGVyIHRoYW4gcmVwbGFjaW5nLlxuICovXG5mdW5jdGlvbiBhcHBseU1vZGVsT3ZlcnJpZGUobW9kZWw6IE1vZGVsPEFwaT4sIG92ZXJyaWRlOiBNb2RlbE92ZXJyaWRlKTogTW9kZWw8QXBpPiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ubW9kZWwgfTtcblxuXHQvLyBTaW1wbGUgZmllbGQgb3ZlcnJpZGVzXG5cdGlmIChvdmVycmlkZS5uYW1lICE9PSB1bmRlZmluZWQpIHJlc3VsdC5uYW1lID0gb3ZlcnJpZGUubmFtZTtcblx0aWYgKG92ZXJyaWRlLnJlYXNvbmluZyAhPT0gdW5kZWZpbmVkKSByZXN1bHQucmVhc29uaW5nID0gb3ZlcnJpZGUucmVhc29uaW5nO1xuXHRpZiAob3ZlcnJpZGUuaW5wdXQgIT09IHVuZGVmaW5lZCkgcmVzdWx0LmlucHV0ID0gb3ZlcnJpZGUuaW5wdXQgYXMgKFwidGV4dFwiIHwgXCJpbWFnZVwiKVtdO1xuXHRpZiAob3ZlcnJpZGUuY29udGV4dFdpbmRvdyAhPT0gdW5kZWZpbmVkKSByZXN1bHQuY29udGV4dFdpbmRvdyA9IG92ZXJyaWRlLmNvbnRleHRXaW5kb3c7XG5cdGlmIChvdmVycmlkZS5tYXhUb2tlbnMgIT09IHVuZGVmaW5lZCkgcmVzdWx0Lm1heFRva2VucyA9IG92ZXJyaWRlLm1heFRva2VucztcblxuXHQvLyBNZXJnZSBjb3N0IChwYXJ0aWFsIG92ZXJyaWRlKVxuXHRpZiAob3ZlcnJpZGUuY29zdCkge1xuXHRcdHJlc3VsdC5jb3N0ID0ge1xuXHRcdFx0aW5wdXQ6IG92ZXJyaWRlLmNvc3QuaW5wdXQgPz8gbW9kZWwuY29zdC5pbnB1dCxcblx0XHRcdG91dHB1dDogb3ZlcnJpZGUuY29zdC5vdXRwdXQgPz8gbW9kZWwuY29zdC5vdXRwdXQsXG5cdFx0XHRjYWNoZVJlYWQ6IG92ZXJyaWRlLmNvc3QuY2FjaGVSZWFkID8/IG1vZGVsLmNvc3QuY2FjaGVSZWFkLFxuXHRcdFx0Y2FjaGVXcml0ZTogb3ZlcnJpZGUuY29zdC5jYWNoZVdyaXRlID8/IG1vZGVsLmNvc3QuY2FjaGVXcml0ZSxcblx0XHR9O1xuXHR9XG5cblx0Ly8gTWVyZ2UgaGVhZGVyc1xuXHRpZiAob3ZlcnJpZGUuaGVhZGVycykge1xuXHRcdGNvbnN0IHJlc29sdmVkSGVhZGVycyA9IHJlc29sdmVIZWFkZXJzKG92ZXJyaWRlLmhlYWRlcnMpO1xuXHRcdHJlc3VsdC5oZWFkZXJzID0gcmVzb2x2ZWRIZWFkZXJzID8geyAuLi5tb2RlbC5oZWFkZXJzLCAuLi5yZXNvbHZlZEhlYWRlcnMgfSA6IG1vZGVsLmhlYWRlcnM7XG5cdH1cblxuXHQvLyBEZWVwIG1lcmdlIGNvbXBhdFxuXHRyZXN1bHQuY29tcGF0ID0gbWVyZ2VDb21wYXQobW9kZWwuY29tcGF0LCBvdmVycmlkZS5jb21wYXQpO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBDbGVhciB0aGUgY29uZmlnIHZhbHVlIGNvbW1hbmQgY2FjaGUuIEV4cG9ydGVkIGZvciB0ZXN0aW5nLiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyQXBpS2V5Q2FjaGUgPSBjbGVhckNvbmZpZ1ZhbHVlQ2FjaGU7XG5cbi8qKlxuICogTW9kZWwgcmVnaXN0cnkgLSBsb2FkcyBhbmQgbWFuYWdlcyBtb2RlbHMsIHJlc29sdmVzIEFQSSBrZXlzIHZpYSBBdXRoU3RvcmFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsUmVnaXN0cnkge1xuXHRwcml2YXRlIG1vZGVsczogTW9kZWw8QXBpPltdID0gW107XG5cdHByaXZhdGUgY3VzdG9tUHJvdmlkZXJBcGlLZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIHJlZ2lzdGVyZWRQcm92aWRlcnM6IE1hcDxzdHJpbmcsIFByb3ZpZGVyQ29uZmlnSW5wdXQ+ID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIGxvYWRFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHJlYWRvbmx5IGF1dGhTdG9yYWdlOiBBdXRoU3RvcmFnZSxcblx0XHRwcml2YXRlIG1vZGVsc0pzb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBqb2luKGdldEFnZW50RGlyKCksIFwibW9kZWxzLmpzb25cIiksXG5cdCkge1xuXHRcdC8vIFNldCB1cCBmYWxsYmFjayByZXNvbHZlciBmb3IgY3VzdG9tIHByb3ZpZGVyIEFQSSBrZXlzXG5cdFx0dGhpcy5hdXRoU3RvcmFnZS5zZXRGYWxsYmFja1Jlc29sdmVyKChwcm92aWRlcikgPT4ge1xuXHRcdFx0Y29uc3Qga2V5Q29uZmlnID0gdGhpcy5jdXN0b21Qcm92aWRlckFwaUtleXMuZ2V0KHByb3ZpZGVyKTtcblx0XHRcdGlmIChrZXlDb25maWcpIHtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmVDb25maWdWYWx1ZShrZXlDb25maWcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KTtcblxuXHRcdC8vIExvYWQgbW9kZWxzXG5cdFx0dGhpcy5sb2FkTW9kZWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVsb2FkIG1vZGVscyBmcm9tIGRpc2sgKGJ1aWx0LWluICsgY3VzdG9tIGZyb20gbW9kZWxzLmpzb24pLlxuXHQgKi9cblx0cmVmcmVzaCgpOiB2b2lkIHtcblx0XHR0aGlzLmN1c3RvbVByb3ZpZGVyQXBpS2V5cy5jbGVhcigpO1xuXHRcdHRoaXMubG9hZEVycm9yID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMubG9hZE1vZGVscygpO1xuXG5cdFx0Zm9yIChjb25zdCBbcHJvdmlkZXJOYW1lLCBjb25maWddIG9mIHRoaXMucmVnaXN0ZXJlZFByb3ZpZGVycy5lbnRyaWVzKCkpIHtcblx0XHRcdHRoaXMuYXBwbHlQcm92aWRlckNvbmZpZyhwcm92aWRlck5hbWUsIGNvbmZpZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbnkgZXJyb3IgZnJvbSBsb2FkaW5nIG1vZGVscy5qc29uICh1bmRlZmluZWQgaWYgbm8gZXJyb3IpLlxuXHQgKi9cblx0Z2V0RXJyb3IoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5sb2FkRXJyb3I7XG5cdH1cblxuXHRwcml2YXRlIGxvYWRNb2RlbHMoKTogdm9pZCB7XG5cdFx0Ly8gTG9hZCBjdXN0b20gbW9kZWxzIGFuZCBvdmVycmlkZXMgZnJvbSBtb2RlbHMuanNvblxuXHRcdGNvbnN0IHtcblx0XHRcdG1vZGVsczogY3VzdG9tTW9kZWxzLFxuXHRcdFx0b3ZlcnJpZGVzLFxuXHRcdFx0bW9kZWxPdmVycmlkZXMsXG5cdFx0XHRlcnJvcixcblx0XHR9ID0gdGhpcy5tb2RlbHNKc29uUGF0aCA/IHRoaXMubG9hZEN1c3RvbU1vZGVscyh0aGlzLm1vZGVsc0pzb25QYXRoKSA6IGVtcHR5Q3VzdG9tTW9kZWxzUmVzdWx0KCk7XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdHRoaXMubG9hZEVycm9yID0gZXJyb3I7XG5cdFx0XHQvLyBLZWVwIGJ1aWx0LWluIG1vZGVscyBldmVuIGlmIGN1c3RvbSBtb2RlbHMgZmFpbGVkIHRvIGxvYWRcblx0XHR9XG5cblx0XHRjb25zdCBidWlsdEluTW9kZWxzID0gdGhpcy5sb2FkQnVpbHRJbk1vZGVscyhvdmVycmlkZXMsIG1vZGVsT3ZlcnJpZGVzKTtcblx0XHRsZXQgY29tYmluZWQgPSB0aGlzLm1lcmdlQ3VzdG9tTW9kZWxzKGJ1aWx0SW5Nb2RlbHMsIGN1c3RvbU1vZGVscyk7XG5cblx0XHQvLyBMZXQgT0F1dGggcHJvdmlkZXJzIG1vZGlmeSB0aGVpciBtb2RlbHMgKGUuZy4sIHVwZGF0ZSBiYXNlVXJsKVxuXHRcdGZvciAoY29uc3Qgb2F1dGhQcm92aWRlciBvZiB0aGlzLmF1dGhTdG9yYWdlLmdldE9BdXRoUHJvdmlkZXJzKCkpIHtcblx0XHRcdGNvbnN0IGNyZWQgPSB0aGlzLmF1dGhTdG9yYWdlLmdldChvYXV0aFByb3ZpZGVyLmlkKTtcblx0XHRcdGlmIChjcmVkPy50eXBlID09PSBcIm9hdXRoXCIgJiYgb2F1dGhQcm92aWRlci5tb2RpZnlNb2RlbHMpIHtcblx0XHRcdFx0Y29tYmluZWQgPSBvYXV0aFByb3ZpZGVyLm1vZGlmeU1vZGVscyhjb21iaW5lZCwgY3JlZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RlbHMgPSBjb21iaW5lZDtcblx0fVxuXG5cdC8qKiBMb2FkIGJ1aWx0LWluIG1vZGVscyBhbmQgYXBwbHkgcHJvdmlkZXIvbW9kZWwgb3ZlcnJpZGVzICovXG5cdHByaXZhdGUgbG9hZEJ1aWx0SW5Nb2RlbHMoXG5cdFx0b3ZlcnJpZGVzOiBNYXA8c3RyaW5nLCBQcm92aWRlck92ZXJyaWRlPixcblx0XHRtb2RlbE92ZXJyaWRlczogTWFwPHN0cmluZywgTWFwPHN0cmluZywgTW9kZWxPdmVycmlkZT4+LFxuXHQpOiBNb2RlbDxBcGk+W10ge1xuXHRcdHJldHVybiBnZXRQcm92aWRlcnMoKS5mbGF0TWFwKChwcm92aWRlcikgPT4ge1xuXHRcdFx0Y29uc3QgbW9kZWxzID0gZ2V0TW9kZWxzKHByb3ZpZGVyIGFzIEtub3duUHJvdmlkZXIpIGFzIE1vZGVsPEFwaT5bXTtcblx0XHRcdGNvbnN0IHByb3ZpZGVyT3ZlcnJpZGUgPSBvdmVycmlkZXMuZ2V0KHByb3ZpZGVyKTtcblx0XHRcdGNvbnN0IHBlck1vZGVsT3ZlcnJpZGVzID0gbW9kZWxPdmVycmlkZXMuZ2V0KHByb3ZpZGVyKTtcblxuXHRcdFx0cmV0dXJuIG1vZGVscy5tYXAoKG0pID0+IHtcblx0XHRcdFx0bGV0IG1vZGVsID0gbTtcblxuXHRcdFx0XHQvLyBBcHBseSBwcm92aWRlci1sZXZlbCBiYXNlVXJsL2hlYWRlcnMgb3ZlcnJpZGVcblx0XHRcdFx0aWYgKHByb3ZpZGVyT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZEhlYWRlcnMgPSByZXNvbHZlSGVhZGVycyhwcm92aWRlck92ZXJyaWRlLmhlYWRlcnMpO1xuXHRcdFx0XHRcdG1vZGVsID0ge1xuXHRcdFx0XHRcdFx0Li4ubW9kZWwsXG5cdFx0XHRcdFx0XHRiYXNlVXJsOiBwcm92aWRlck92ZXJyaWRlLmJhc2VVcmwgPz8gbW9kZWwuYmFzZVVybCxcblx0XHRcdFx0XHRcdGhlYWRlcnM6IHJlc29sdmVkSGVhZGVycyA/IHsgLi4ubW9kZWwuaGVhZGVycywgLi4ucmVzb2x2ZWRIZWFkZXJzIH0gOiBtb2RlbC5oZWFkZXJzLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBwZXItbW9kZWwgb3ZlcnJpZGVcblx0XHRcdFx0Y29uc3QgbW9kZWxPdmVycmlkZSA9IHBlck1vZGVsT3ZlcnJpZGVzPy5nZXQobS5pZCk7XG5cdFx0XHRcdGlmIChtb2RlbE92ZXJyaWRlKSB7XG5cdFx0XHRcdFx0bW9kZWwgPSBhcHBseU1vZGVsT3ZlcnJpZGUobW9kZWwsIG1vZGVsT3ZlcnJpZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1vZGVsO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogTWVyZ2UgY3VzdG9tIG1vZGVscyBpbnRvIGJ1aWx0LWluIGxpc3QgYnkgcHJvdmlkZXIraWQgKGN1c3RvbSB3aW5zIG9uIGNvbmZsaWN0cykuICovXG5cdHByaXZhdGUgbWVyZ2VDdXN0b21Nb2RlbHMoYnVpbHRJbk1vZGVsczogTW9kZWw8QXBpPltdLCBjdXN0b21Nb2RlbHM6IE1vZGVsPEFwaT5bXSk6IE1vZGVsPEFwaT5bXSB7XG5cdFx0Y29uc3QgbWVyZ2VkID0gWy4uLmJ1aWx0SW5Nb2RlbHNdO1xuXHRcdGZvciAoY29uc3QgY3VzdG9tTW9kZWwgb2YgY3VzdG9tTW9kZWxzKSB7XG5cdFx0XHRjb25zdCBleGlzdGluZ0luZGV4ID0gbWVyZ2VkLmZpbmRJbmRleCgobSkgPT4gbS5wcm92aWRlciA9PT0gY3VzdG9tTW9kZWwucHJvdmlkZXIgJiYgbS5pZCA9PT0gY3VzdG9tTW9kZWwuaWQpO1xuXHRcdFx0aWYgKGV4aXN0aW5nSW5kZXggPj0gMCkge1xuXHRcdFx0XHRtZXJnZWRbZXhpc3RpbmdJbmRleF0gPSBjdXN0b21Nb2RlbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lcmdlZC5wdXNoKGN1c3RvbU1vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1lcmdlZDtcblx0fVxuXG5cdHByaXZhdGUgbG9hZEN1c3RvbU1vZGVscyhtb2RlbHNKc29uUGF0aDogc3RyaW5nKTogQ3VzdG9tTW9kZWxzUmVzdWx0IHtcblx0XHRpZiAoIWV4aXN0c1N5bmMobW9kZWxzSnNvblBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gZW1wdHlDdXN0b21Nb2RlbHNSZXN1bHQoKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhtb2RlbHNKc29uUGF0aCwgXCJ1dGYtOFwiKTtcblx0XHRcdGNvbnN0IGNvbmZpZzogTW9kZWxzQ29uZmlnID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgc2NoZW1hXG5cdFx0XHRjb25zdCBhanYgPSBuZXcgQWp2KCk7XG5cdFx0XHRjb25zdCB2YWxpZGF0ZSA9IGFqdi5jb21waWxlKE1vZGVsc0NvbmZpZ1NjaGVtYSk7XG5cdFx0XHRpZiAoIXZhbGlkYXRlKGNvbmZpZykpIHtcblx0XHRcdFx0Y29uc3QgZXJyb3JzID1cblx0XHRcdFx0XHR2YWxpZGF0ZS5lcnJvcnM/Lm1hcCgoZTogYW55KSA9PiBgICAtICR7ZS5pbnN0YW5jZVBhdGggfHwgXCJyb290XCJ9OiAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpIHx8XG5cdFx0XHRcdFx0XCJVbmtub3duIHNjaGVtYSBlcnJvclwiO1xuXHRcdFx0XHRyZXR1cm4gZW1wdHlDdXN0b21Nb2RlbHNSZXN1bHQoYEludmFsaWQgbW9kZWxzLmpzb24gc2NoZW1hOlxcbiR7ZXJyb3JzfVxcblxcbkZpbGU6ICR7bW9kZWxzSnNvblBhdGh9YCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZGl0aW9uYWwgdmFsaWRhdGlvblxuXHRcdFx0dGhpcy52YWxpZGF0ZUNvbmZpZyhjb25maWcpO1xuXG5cdFx0XHRjb25zdCBvdmVycmlkZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvdmlkZXJPdmVycmlkZT4oKTtcblx0XHRcdGNvbnN0IG1vZGVsT3ZlcnJpZGVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE1vZGVsT3ZlcnJpZGU+PigpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IFtwcm92aWRlck5hbWUsIHByb3ZpZGVyQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcucHJvdmlkZXJzKSkge1xuXHRcdFx0XHQvLyBBcHBseSBwcm92aWRlci1sZXZlbCBiYXNlVXJsL2hlYWRlcnMvYXBpS2V5IG92ZXJyaWRlIHRvIGJ1aWx0LWluIG1vZGVscyB3aGVuIGNvbmZpZ3VyZWQuXG5cdFx0XHRcdGlmIChwcm92aWRlckNvbmZpZy5iYXNlVXJsIHx8IHByb3ZpZGVyQ29uZmlnLmhlYWRlcnMgfHwgcHJvdmlkZXJDb25maWcuYXBpS2V5KSB7XG5cdFx0XHRcdFx0b3ZlcnJpZGVzLnNldChwcm92aWRlck5hbWUsIHtcblx0XHRcdFx0XHRcdGJhc2VVcmw6IHByb3ZpZGVyQ29uZmlnLmJhc2VVcmwsXG5cdFx0XHRcdFx0XHRoZWFkZXJzOiBwcm92aWRlckNvbmZpZy5oZWFkZXJzLFxuXHRcdFx0XHRcdFx0YXBpS2V5OiBwcm92aWRlckNvbmZpZy5hcGlLZXksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdG9yZSBBUEkga2V5IGZvciBmYWxsYmFjayByZXNvbHZlci5cblx0XHRcdFx0aWYgKHByb3ZpZGVyQ29uZmlnLmFwaUtleSkge1xuXHRcdFx0XHRcdHRoaXMuY3VzdG9tUHJvdmlkZXJBcGlLZXlzLnNldChwcm92aWRlck5hbWUsIHByb3ZpZGVyQ29uZmlnLmFwaUtleSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHJvdmlkZXJDb25maWcubW9kZWxPdmVycmlkZXMpIHtcblx0XHRcdFx0XHRtb2RlbE92ZXJyaWRlcy5zZXQocHJvdmlkZXJOYW1lLCBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyQ29uZmlnLm1vZGVsT3ZlcnJpZGVzKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG1vZGVsczogdGhpcy5wYXJzZU1vZGVscyhjb25maWcpLCBvdmVycmlkZXMsIG1vZGVsT3ZlcnJpZGVzLCBlcnJvcjogdW5kZWZpbmVkIH07XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG5cdFx0XHRcdHJldHVybiBlbXB0eUN1c3RvbU1vZGVsc1Jlc3VsdChgRmFpbGVkIHRvIHBhcnNlIG1vZGVscy5qc29uOiAke2Vycm9yLm1lc3NhZ2V9XFxuXFxuRmlsZTogJHttb2RlbHNKc29uUGF0aH1gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbXB0eUN1c3RvbU1vZGVsc1Jlc3VsdChcblx0XHRcdFx0YEZhaWxlZCB0byBsb2FkIG1vZGVscy5qc29uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9XFxuXFxuRmlsZTogJHttb2RlbHNKc29uUGF0aH1gLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHZhbGlkYXRlQ29uZmlnKGNvbmZpZzogTW9kZWxzQ29uZmlnKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBbcHJvdmlkZXJOYW1lLCBwcm92aWRlckNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLnByb3ZpZGVycykpIHtcblx0XHRcdGNvbnN0IGhhc1Byb3ZpZGVyQXBpID0gISFwcm92aWRlckNvbmZpZy5hcGk7XG5cdFx0XHRjb25zdCBtb2RlbHMgPSBwcm92aWRlckNvbmZpZy5tb2RlbHMgPz8gW107XG5cdFx0XHRjb25zdCBoYXNNb2RlbE92ZXJyaWRlcyA9XG5cdFx0XHRcdHByb3ZpZGVyQ29uZmlnLm1vZGVsT3ZlcnJpZGVzICYmIE9iamVjdC5rZXlzKHByb3ZpZGVyQ29uZmlnLm1vZGVsT3ZlcnJpZGVzKS5sZW5ndGggPiAwO1xuXG5cdFx0XHRpZiAobW9kZWxzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBPdmVycmlkZS1vbmx5IGNvbmZpZzogbmVlZHMgYmFzZVVybCBPUiBtb2RlbE92ZXJyaWRlcyAob3IgYm90aClcblx0XHRcdFx0aWYgKCFwcm92aWRlckNvbmZpZy5iYXNlVXJsICYmICFoYXNNb2RlbE92ZXJyaWRlcykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgJHtwcm92aWRlck5hbWV9OiBtdXN0IHNwZWNpZnkgXCJiYXNlVXJsXCIsIFwibW9kZWxPdmVycmlkZXNcIiwgb3IgXCJtb2RlbHNcIi5gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ3VzdG9tIG1vZGVscyBhcmUgbWVyZ2VkIGludG8gcHJvdmlkZXIgbW9kZWxzIGFuZCByZXF1aXJlIGVuZHBvaW50ICsgYXV0aC5cblx0XHRcdFx0aWYgKCFwcm92aWRlckNvbmZpZy5iYXNlVXJsKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciAke3Byb3ZpZGVyTmFtZX06IFwiYmFzZVVybFwiIGlzIHJlcXVpcmVkIHdoZW4gZGVmaW5pbmcgY3VzdG9tIG1vZGVscy5gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXByb3ZpZGVyQ29uZmlnLmFwaUtleSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgJHtwcm92aWRlck5hbWV9OiBcImFwaUtleVwiIGlzIHJlcXVpcmVkIHdoZW4gZGVmaW5pbmcgY3VzdG9tIG1vZGVscy5gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IG1vZGVsRGVmIG9mIG1vZGVscykge1xuXHRcdFx0XHRjb25zdCBoYXNNb2RlbEFwaSA9ICEhbW9kZWxEZWYuYXBpO1xuXG5cdFx0XHRcdGlmICghaGFzUHJvdmlkZXJBcGkgJiYgIWhhc01vZGVsQXBpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0YFByb3ZpZGVyICR7cHJvdmlkZXJOYW1lfSwgbW9kZWwgJHttb2RlbERlZi5pZH06IG5vIFwiYXBpXCIgc3BlY2lmaWVkLiBTZXQgYXQgcHJvdmlkZXIgb3IgbW9kZWwgbGV2ZWwuYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFtb2RlbERlZi5pZCkgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciAke3Byb3ZpZGVyTmFtZX06IG1vZGVsIG1pc3NpbmcgXCJpZFwiYCk7XG5cdFx0XHRcdC8vIFZhbGlkYXRlIGNvbnRleHRXaW5kb3cvbWF4VG9rZW5zIG9ubHkgaWYgcHJvdmlkZWQgKHRoZXkgaGF2ZSBkZWZhdWx0cylcblx0XHRcdFx0aWYgKG1vZGVsRGVmLmNvbnRleHRXaW5kb3cgIT09IHVuZGVmaW5lZCAmJiBtb2RlbERlZi5jb250ZXh0V2luZG93IDw9IDApXG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciAke3Byb3ZpZGVyTmFtZX0sIG1vZGVsICR7bW9kZWxEZWYuaWR9OiBpbnZhbGlkIGNvbnRleHRXaW5kb3dgKTtcblx0XHRcdFx0aWYgKG1vZGVsRGVmLm1heFRva2VucyAhPT0gdW5kZWZpbmVkICYmIG1vZGVsRGVmLm1heFRva2VucyA8PSAwKVxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgJHtwcm92aWRlck5hbWV9LCBtb2RlbCAke21vZGVsRGVmLmlkfTogaW52YWxpZCBtYXhUb2tlbnNgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlTW9kZWxzKGNvbmZpZzogTW9kZWxzQ29uZmlnKTogTW9kZWw8QXBpPltdIHtcblx0XHRjb25zdCBtb2RlbHM6IE1vZGVsPEFwaT5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBbcHJvdmlkZXJOYW1lLCBwcm92aWRlckNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLnByb3ZpZGVycykpIHtcblx0XHRcdGNvbnN0IG1vZGVsRGVmcyA9IHByb3ZpZGVyQ29uZmlnLm1vZGVscyA/PyBbXTtcblx0XHRcdGlmIChtb2RlbERlZnMubGVuZ3RoID09PSAwKSBjb250aW51ZTsgLy8gT3ZlcnJpZGUtb25seSwgbm8gY3VzdG9tIG1vZGVsc1xuXG5cdFx0XHQvLyBTdG9yZSBBUEkga2V5IGNvbmZpZyBmb3IgZmFsbGJhY2sgcmVzb2x2ZXJcblx0XHRcdGlmIChwcm92aWRlckNvbmZpZy5hcGlLZXkpIHtcblx0XHRcdFx0dGhpcy5jdXN0b21Qcm92aWRlckFwaUtleXMuc2V0KHByb3ZpZGVyTmFtZSwgcHJvdmlkZXJDb25maWcuYXBpS2V5KTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBtb2RlbERlZiBvZiBtb2RlbERlZnMpIHtcblx0XHRcdFx0Y29uc3QgYXBpID0gbW9kZWxEZWYuYXBpIHx8IHByb3ZpZGVyQ29uZmlnLmFwaTtcblx0XHRcdFx0aWYgKCFhcGkpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdC8vIE1lcmdlIGhlYWRlcnM6IHByb3ZpZGVyIGhlYWRlcnMgYXJlIGJhc2UsIG1vZGVsIGhlYWRlcnMgb3ZlcnJpZGVcblx0XHRcdFx0Ly8gUmVzb2x2ZSBlbnYgdmFycyBhbmQgc2hlbGwgY29tbWFuZHMgaW4gaGVhZGVyIHZhbHVlc1xuXHRcdFx0XHRjb25zdCBwcm92aWRlckhlYWRlcnMgPSByZXNvbHZlSGVhZGVycyhwcm92aWRlckNvbmZpZy5oZWFkZXJzKTtcblx0XHRcdFx0Y29uc3QgbW9kZWxIZWFkZXJzID0gcmVzb2x2ZUhlYWRlcnMobW9kZWxEZWYuaGVhZGVycyk7XG5cdFx0XHRcdGxldCBoZWFkZXJzID0gcHJvdmlkZXJIZWFkZXJzIHx8IG1vZGVsSGVhZGVycyA/IHsgLi4ucHJvdmlkZXJIZWFkZXJzLCAuLi5tb2RlbEhlYWRlcnMgfSA6IHVuZGVmaW5lZDtcblxuXHRcdFx0XHQvLyBJZiBhdXRoSGVhZGVyIGlzIHRydWUsIGFkZCBBdXRob3JpemF0aW9uIGhlYWRlciB3aXRoIHJlc29sdmVkIEFQSSBrZXlcblx0XHRcdFx0aWYgKHByb3ZpZGVyQ29uZmlnLmF1dGhIZWFkZXIgJiYgcHJvdmlkZXJDb25maWcuYXBpS2V5KSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRLZXkgPSByZXNvbHZlQ29uZmlnVmFsdWUocHJvdmlkZXJDb25maWcuYXBpS2V5KTtcblx0XHRcdFx0XHRpZiAocmVzb2x2ZWRLZXkpIHtcblx0XHRcdFx0XHRcdGhlYWRlcnMgPSB7IC4uLmhlYWRlcnMsIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtyZXNvbHZlZEtleX1gIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYmFzZVVybCBpcyB2YWxpZGF0ZWQgdG8gZXhpc3QgZm9yIHByb3ZpZGVycyB3aXRoIG1vZGVsc1xuXHRcdFx0XHQvLyBBcHBseSBkZWZhdWx0cyBmb3Igb3B0aW9uYWwgZmllbGRzXG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRDb3N0ID0geyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfTtcblx0XHRcdFx0bW9kZWxzLnB1c2goe1xuXHRcdFx0XHRcdGlkOiBtb2RlbERlZi5pZCxcblx0XHRcdFx0XHRuYW1lOiBtb2RlbERlZi5uYW1lID8/IG1vZGVsRGVmLmlkLFxuXHRcdFx0XHRcdGFwaTogYXBpIGFzIEFwaSxcblx0XHRcdFx0XHRwcm92aWRlcjogcHJvdmlkZXJOYW1lLFxuXHRcdFx0XHRcdGJhc2VVcmw6IHByb3ZpZGVyQ29uZmlnLmJhc2VVcmwhLFxuXHRcdFx0XHRcdHJlYXNvbmluZzogbW9kZWxEZWYucmVhc29uaW5nID8/IGZhbHNlLFxuXHRcdFx0XHRcdGlucHV0OiAobW9kZWxEZWYuaW5wdXQgPz8gW1widGV4dFwiXSkgYXMgKFwidGV4dFwiIHwgXCJpbWFnZVwiKVtdLFxuXHRcdFx0XHRcdGNvc3Q6IG1vZGVsRGVmLmNvc3QgPz8gZGVmYXVsdENvc3QsXG5cdFx0XHRcdFx0Y29udGV4dFdpbmRvdzogbW9kZWxEZWYuY29udGV4dFdpbmRvdyA/PyAxMjgwMDAsXG5cdFx0XHRcdFx0bWF4VG9rZW5zOiBtb2RlbERlZi5tYXhUb2tlbnMgPz8gMTYzODQsXG5cdFx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0XHRjb21wYXQ6IG1vZGVsRGVmLmNvbXBhdCxcblx0XHRcdFx0fSBhcyBNb2RlbDxBcGk+KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbW9kZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgbW9kZWxzIChidWlsdC1pbiArIGN1c3RvbSkuXG5cdCAqIElmIG1vZGVscy5qc29uIGhhZCBlcnJvcnMsIHJldHVybnMgb25seSBidWlsdC1pbiBtb2RlbHMuXG5cdCAqL1xuXHRnZXRBbGwoKTogTW9kZWw8QXBpPltdIHtcblx0XHRyZXR1cm4gdGhpcy5tb2RlbHM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IG9ubHkgbW9kZWxzIHRoYXQgaGF2ZSBhdXRoIGNvbmZpZ3VyZWQuXG5cdCAqIFRoaXMgaXMgYSBmYXN0IGNoZWNrIHRoYXQgZG9lc24ndCByZWZyZXNoIE9BdXRoIHRva2Vucy5cblx0ICovXG5cdGdldEF2YWlsYWJsZSgpOiBNb2RlbDxBcGk+W10ge1xuXHRcdHJldHVybiB0aGlzLm1vZGVscy5maWx0ZXIoKG0pID0+IHRoaXMuYXV0aFN0b3JhZ2UuaGFzQXV0aChtLnByb3ZpZGVyKSk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIG1vZGVsIGJ5IHByb3ZpZGVyIGFuZCBJRC5cblx0ICovXG5cdGZpbmQocHJvdmlkZXI6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nKTogTW9kZWw8QXBpPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxzLmZpbmQoKG0pID0+IG0ucHJvdmlkZXIgPT09IHByb3ZpZGVyICYmIG0uaWQgPT09IG1vZGVsSWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBBUEkga2V5IGZvciBhIG1vZGVsLlxuXHQgKi9cblx0YXN5bmMgZ2V0QXBpS2V5KG1vZGVsOiBNb2RlbDxBcGk+KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hdXRoU3RvcmFnZS5nZXRBcGlLZXkobW9kZWwucHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBBUEkga2V5IGZvciBhIHByb3ZpZGVyLlxuXHQgKi9cblx0YXN5bmMgZ2V0QXBpS2V5Rm9yUHJvdmlkZXIocHJvdmlkZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXV0aFN0b3JhZ2UuZ2V0QXBpS2V5KHByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhIG1vZGVsIGlzIHVzaW5nIE9BdXRoIGNyZWRlbnRpYWxzIChzdWJzY3JpcHRpb24pLlxuXHQgKi9cblx0aXNVc2luZ09BdXRoKG1vZGVsOiBNb2RlbDxBcGk+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3JlZCA9IHRoaXMuYXV0aFN0b3JhZ2UuZ2V0KG1vZGVsLnByb3ZpZGVyKTtcblx0XHRyZXR1cm4gY3JlZD8udHlwZSA9PT0gXCJvYXV0aFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIGEgcHJvdmlkZXIgZHluYW1pY2FsbHkgKGZyb20gZXh0ZW5zaW9ucykuXG5cdCAqXG5cdCAqIElmIHByb3ZpZGVyIGhhcyBtb2RlbHM6IHJlcGxhY2VzIGFsbCBleGlzdGluZyBtb2RlbHMgZm9yIHRoaXMgcHJvdmlkZXIuXG5cdCAqIElmIHByb3ZpZGVyIGhhcyBvbmx5IGJhc2VVcmwvaGVhZGVyczogb3ZlcnJpZGVzIGV4aXN0aW5nIG1vZGVscycgVVJMcy5cblx0ICogSWYgcHJvdmlkZXIgaGFzIG9hdXRoOiByZWdpc3RlcnMgT0F1dGggcHJvdmlkZXIgZm9yIC9sb2dpbiBzdXBwb3J0LlxuXHQgKi9cblx0cmVnaXN0ZXJQcm92aWRlcihwcm92aWRlck5hbWU6IHN0cmluZywgY29uZmlnOiBQcm92aWRlckNvbmZpZ0lucHV0KTogdm9pZCB7XG5cdFx0dGhpcy5yZWdpc3RlcmVkUHJvdmlkZXJzLnNldChwcm92aWRlck5hbWUsIGNvbmZpZyk7XG5cdFx0dGhpcy5hcHBseVByb3ZpZGVyQ29uZmlnKHByb3ZpZGVyTmFtZSwgY29uZmlnKTtcblx0fVxuXG5cdHByaXZhdGUgYXBwbHlQcm92aWRlckNvbmZpZyhwcm92aWRlck5hbWU6IHN0cmluZywgY29uZmlnOiBQcm92aWRlckNvbmZpZ0lucHV0KTogdm9pZCB7XG5cdFx0Ly8gUmVnaXN0ZXIgT0F1dGggcHJvdmlkZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoY29uZmlnLm9hdXRoKSB7XG5cdFx0XHQvLyBFbnN1cmUgdGhlIE9BdXRoIHByb3ZpZGVyIElEIG1hdGNoZXMgdGhlIHByb3ZpZGVyIG5hbWVcblx0XHRcdGNvbnN0IG9hdXRoUHJvdmlkZXI6IE9BdXRoUHJvdmlkZXJJbnRlcmZhY2UgPSB7XG5cdFx0XHRcdC4uLmNvbmZpZy5vYXV0aCxcblx0XHRcdFx0aWQ6IHByb3ZpZGVyTmFtZSxcblx0XHRcdH07XG5cdFx0XHRyZWdpc3Rlck9BdXRoUHJvdmlkZXIob2F1dGhQcm92aWRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbmZpZy5zdHJlYW1TaW1wbGUpIHtcblx0XHRcdGlmICghY29uZmlnLmFwaSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyICR7cHJvdmlkZXJOYW1lfTogXCJhcGlcIiBpcyByZXF1aXJlZCB3aGVuIHJlZ2lzdGVyaW5nIHN0cmVhbVNpbXBsZS5gKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN0cmVhbVNpbXBsZSA9IGNvbmZpZy5zdHJlYW1TaW1wbGU7XG5cdFx0XHRyZWdpc3RlckFwaVByb3ZpZGVyKHtcblx0XHRcdFx0YXBpOiBjb25maWcuYXBpLFxuXHRcdFx0XHRzdHJlYW06IChtb2RlbCwgY29udGV4dCwgb3B0aW9ucykgPT4gc3RyZWFtU2ltcGxlKG1vZGVsLCBjb250ZXh0LCBvcHRpb25zIGFzIFNpbXBsZVN0cmVhbU9wdGlvbnMpLFxuXHRcdFx0XHRzdHJlYW1TaW1wbGUsXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBBUEkga2V5IGZvciBhdXRoIHJlc29sdXRpb25cblx0XHRpZiAoY29uZmlnLmFwaUtleSkge1xuXHRcdFx0dGhpcy5jdXN0b21Qcm92aWRlckFwaUtleXMuc2V0KHByb3ZpZGVyTmFtZSwgY29uZmlnLmFwaUtleSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbmZpZy5tb2RlbHMgJiYgY29uZmlnLm1vZGVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBGdWxsIHJlcGxhY2VtZW50OiByZW1vdmUgZXhpc3RpbmcgbW9kZWxzIGZvciB0aGlzIHByb3ZpZGVyXG5cdFx0XHR0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLmZpbHRlcigobSkgPT4gbS5wcm92aWRlciAhPT0gcHJvdmlkZXJOYW1lKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG5cdFx0XHRpZiAoIWNvbmZpZy5iYXNlVXJsKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgJHtwcm92aWRlck5hbWV9OiBcImJhc2VVcmxcIiBpcyByZXF1aXJlZCB3aGVuIGRlZmluaW5nIG1vZGVscy5gKTtcblx0XHRcdH1cblx0XHRcdGlmICghY29uZmlnLmFwaUtleSAmJiAhY29uZmlnLm9hdXRoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgJHtwcm92aWRlck5hbWV9OiBcImFwaUtleVwiIG9yIFwib2F1dGhcIiBpcyByZXF1aXJlZCB3aGVuIGRlZmluaW5nIG1vZGVscy5gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFyc2UgYW5kIGFkZCBuZXcgbW9kZWxzXG5cdFx0XHRmb3IgKGNvbnN0IG1vZGVsRGVmIG9mIGNvbmZpZy5tb2RlbHMpIHtcblx0XHRcdFx0Y29uc3QgYXBpID0gbW9kZWxEZWYuYXBpIHx8IGNvbmZpZy5hcGk7XG5cdFx0XHRcdGlmICghYXBpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciAke3Byb3ZpZGVyTmFtZX0sIG1vZGVsICR7bW9kZWxEZWYuaWR9OiBubyBcImFwaVwiIHNwZWNpZmllZC5gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1lcmdlIGhlYWRlcnNcblx0XHRcdFx0Y29uc3QgcHJvdmlkZXJIZWFkZXJzID0gcmVzb2x2ZUhlYWRlcnMoY29uZmlnLmhlYWRlcnMpO1xuXHRcdFx0XHRjb25zdCBtb2RlbEhlYWRlcnMgPSByZXNvbHZlSGVhZGVycyhtb2RlbERlZi5oZWFkZXJzKTtcblx0XHRcdFx0bGV0IGhlYWRlcnMgPSBwcm92aWRlckhlYWRlcnMgfHwgbW9kZWxIZWFkZXJzID8geyAuLi5wcm92aWRlckhlYWRlcnMsIC4uLm1vZGVsSGVhZGVycyB9IDogdW5kZWZpbmVkO1xuXG5cdFx0XHRcdC8vIElmIGF1dGhIZWFkZXIgaXMgdHJ1ZSwgYWRkIEF1dGhvcml6YXRpb24gaGVhZGVyXG5cdFx0XHRcdGlmIChjb25maWcuYXV0aEhlYWRlciAmJiBjb25maWcuYXBpS2V5KSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRLZXkgPSByZXNvbHZlQ29uZmlnVmFsdWUoY29uZmlnLmFwaUtleSk7XG5cdFx0XHRcdFx0aWYgKHJlc29sdmVkS2V5KSB7XG5cdFx0XHRcdFx0XHRoZWFkZXJzID0geyAuLi5oZWFkZXJzLCBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cmVzb2x2ZWRLZXl9YCB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMubW9kZWxzLnB1c2goe1xuXHRcdFx0XHRcdGlkOiBtb2RlbERlZi5pZCxcblx0XHRcdFx0XHRuYW1lOiBtb2RlbERlZi5uYW1lLFxuXHRcdFx0XHRcdGFwaTogYXBpIGFzIEFwaSxcblx0XHRcdFx0XHRwcm92aWRlcjogcHJvdmlkZXJOYW1lLFxuXHRcdFx0XHRcdGJhc2VVcmw6IGNvbmZpZy5iYXNlVXJsLFxuXHRcdFx0XHRcdHJlYXNvbmluZzogbW9kZWxEZWYucmVhc29uaW5nLFxuXHRcdFx0XHRcdGlucHV0OiBtb2RlbERlZi5pbnB1dCBhcyAoXCJ0ZXh0XCIgfCBcImltYWdlXCIpW10sXG5cdFx0XHRcdFx0Y29zdDogbW9kZWxEZWYuY29zdCxcblx0XHRcdFx0XHRjb250ZXh0V2luZG93OiBtb2RlbERlZi5jb250ZXh0V2luZG93LFxuXHRcdFx0XHRcdG1heFRva2VuczogbW9kZWxEZWYubWF4VG9rZW5zLFxuXHRcdFx0XHRcdGhlYWRlcnMsXG5cdFx0XHRcdFx0Y29tcGF0OiBtb2RlbERlZi5jb21wYXQsXG5cdFx0XHRcdH0gYXMgTW9kZWw8QXBpPik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IE9BdXRoIG1vZGlmeU1vZGVscyBpZiBjcmVkZW50aWFscyBleGlzdCAoZS5nLiwgdG8gdXBkYXRlIGJhc2VVcmwpXG5cdFx0XHRpZiAoY29uZmlnLm9hdXRoPy5tb2RpZnlNb2RlbHMpIHtcblx0XHRcdFx0Y29uc3QgY3JlZCA9IHRoaXMuYXV0aFN0b3JhZ2UuZ2V0KHByb3ZpZGVyTmFtZSk7XG5cdFx0XHRcdGlmIChjcmVkPy50eXBlID09PSBcIm9hdXRoXCIpIHtcblx0XHRcdFx0XHR0aGlzLm1vZGVscyA9IGNvbmZpZy5vYXV0aC5tb2RpZnlNb2RlbHModGhpcy5tb2RlbHMsIGNyZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjb25maWcuYmFzZVVybCkge1xuXHRcdFx0Ly8gT3ZlcnJpZGUtb25seTogdXBkYXRlIGJhc2VVcmwvaGVhZGVycyBmb3IgZXhpc3RpbmcgbW9kZWxzXG5cdFx0XHRjb25zdCByZXNvbHZlZEhlYWRlcnMgPSByZXNvbHZlSGVhZGVycyhjb25maWcuaGVhZGVycyk7XG5cdFx0XHR0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLm1hcCgobSkgPT4ge1xuXHRcdFx0XHRpZiAobS5wcm92aWRlciAhPT0gcHJvdmlkZXJOYW1lKSByZXR1cm4gbTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi5tLFxuXHRcdFx0XHRcdGJhc2VVcmw6IGNvbmZpZy5iYXNlVXJsID8/IG0uYmFzZVVybCxcblx0XHRcdFx0XHRoZWFkZXJzOiByZXNvbHZlZEhlYWRlcnMgPyB7IC4uLm0uaGVhZGVycywgLi4ucmVzb2x2ZWRIZWFkZXJzIH0gOiBtLmhlYWRlcnMsXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBJbnB1dCB0eXBlIGZvciByZWdpc3RlclByb3ZpZGVyIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbmZpZ0lucHV0IHtcblx0YmFzZVVybD86IHN0cmluZztcblx0YXBpS2V5Pzogc3RyaW5nO1xuXHRhcGk/OiBBcGk7XG5cdHN0cmVhbVNpbXBsZT86IChtb2RlbDogTW9kZWw8QXBpPiwgY29udGV4dDogQ29udGV4dCwgb3B0aW9ucz86IFNpbXBsZVN0cmVhbU9wdGlvbnMpID0+IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbTtcblx0aGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdGF1dGhIZWFkZXI/OiBib29sZWFuO1xuXHQvKiogT0F1dGggcHJvdmlkZXIgZm9yIC9sb2dpbiBzdXBwb3J0ICovXG5cdG9hdXRoPzogT21pdDxPQXV0aFByb3ZpZGVySW50ZXJmYWNlLCBcImlkXCI+O1xuXHRtb2RlbHM/OiBBcnJheTx7XG5cdFx0aWQ6IHN0cmluZztcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0YXBpPzogQXBpO1xuXHRcdHJlYXNvbmluZzogYm9vbGVhbjtcblx0XHRpbnB1dDogKFwidGV4dFwiIHwgXCJpbWFnZVwiKVtdO1xuXHRcdGNvc3Q6IHsgaW5wdXQ6IG51bWJlcjsgb3V0cHV0OiBudW1iZXI7IGNhY2hlUmVhZDogbnVtYmVyOyBjYWNoZVdyaXRlOiBudW1iZXIgfTtcblx0XHRjb250ZXh0V2luZG93OiBudW1iZXI7XG5cdFx0bWF4VG9rZW5zOiBudW1iZXI7XG5cdFx0aGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0Y29tcGF0PzogTW9kZWw8QXBpPltcImNvbXBhdFwiXTtcblx0fT47XG59XG5cbmBgYFxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvbW9kZWwtcmVnaXN0cnkudHMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3MjU5MTgwLCJlbmRlZEF0IjoxNzcxMzQ3MjU5NDExLCJkdXJhdGlvbk1zIjoyMzF9fX19LCJlbmRlZEF0IjoxNzcxMzQ3MjU5NDEyLCJkdXJhdGlvbk1zIjoyMzB9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFHQzdhOTJIekFLd2hLTFVaNHIxcU1MIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9tYWluLnRzIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDcyNTk0MTIsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIG1haW4udHNcblxuKipQYXRoOioqIGBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL21haW4udHNgXG4qKlNpemU6KiogMjQzNDkgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuLyoqXG4gKiBNYWluIGVudHJ5IHBvaW50IGZvciB0aGUgY29kaW5nIGFnZW50IENMSS5cbiAqXG4gKiBUaGlzIGZpbGUgaGFuZGxlcyBDTEkgYXJndW1lbnQgcGFyc2luZyBhbmQgdHJhbnNsYXRlcyB0aGVtIGludG9cbiAqIGNyZWF0ZUFnZW50U2Vzc2lvbigpIG9wdGlvbnMuIFRoZSBTREsgZG9lcyB0aGUgaGVhdnkgbGlmdGluZy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIEltYWdlQ29udGVudCwgbW9kZWxzQXJlRXF1YWwsIHN1cHBvcnRzWGhpZ2ggfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1haVwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcInJlYWRsaW5lXCI7XG5pbXBvcnQgeyB0eXBlIEFyZ3MsIHBhcnNlQXJncywgcHJpbnRIZWxwIH0gZnJvbSBcIi4vY2xpL2FyZ3MuanNcIjtcbmltcG9ydCB7IHNlbGVjdENvbmZpZyB9IGZyb20gXCIuL2NsaS9jb25maWctc2VsZWN0b3IuanNcIjtcbmltcG9ydCB7IHByb2Nlc3NGaWxlQXJndW1lbnRzIH0gZnJvbSBcIi4vY2xpL2ZpbGUtcHJvY2Vzc29yLmpzXCI7XG5pbXBvcnQgeyBsaXN0TW9kZWxzIH0gZnJvbSBcIi4vY2xpL2xpc3QtbW9kZWxzLmpzXCI7XG5pbXBvcnQgeyBzZWxlY3RTZXNzaW9uIH0gZnJvbSBcIi4vY2xpL3Nlc3Npb24tcGlja2VyLmpzXCI7XG5pbXBvcnQgeyBBUFBfTkFNRSwgZ2V0QWdlbnREaXIsIGdldE1vZGVsc1BhdGgsIFZFUlNJT04gfSBmcm9tIFwiLi9jb25maWcuanNcIjtcbmltcG9ydCB7IEF1dGhTdG9yYWdlIH0gZnJvbSBcIi4vY29yZS9hdXRoLXN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IERFRkFVTFRfVEhJTktJTkdfTEVWRUwgfSBmcm9tIFwiLi9jb3JlL2RlZmF1bHRzLmpzXCI7XG5pbXBvcnQgeyBleHBvcnRGcm9tRmlsZSB9IGZyb20gXCIuL2NvcmUvZXhwb3J0LWh0bWwvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgTG9hZEV4dGVuc2lvbnNSZXN1bHQgfSBmcm9tIFwiLi9jb3JlL2V4dGVuc2lvbnMvaW5kZXguanNcIjtcbmltcG9ydCB7IEtleWJpbmRpbmdzTWFuYWdlciB9IGZyb20gXCIuL2NvcmUva2V5YmluZGluZ3MuanNcIjtcbmltcG9ydCB7IE1vZGVsUmVnaXN0cnkgfSBmcm9tIFwiLi9jb3JlL21vZGVsLXJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlQ2xpTW9kZWwsIHJlc29sdmVNb2RlbFNjb3BlLCB0eXBlIFNjb3BlZE1vZGVsIH0gZnJvbSBcIi4vY29yZS9tb2RlbC1yZXNvbHZlci5qc1wiO1xuaW1wb3J0IHsgRGVmYXVsdFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vY29yZS9wYWNrYWdlLW1hbmFnZXIuanNcIjtcbmltcG9ydCB7IERlZmF1bHRSZXNvdXJjZUxvYWRlciB9IGZyb20gXCIuL2NvcmUvcmVzb3VyY2UtbG9hZGVyLmpzXCI7XG5pbXBvcnQgeyB0eXBlIENyZWF0ZUFnZW50U2Vzc2lvbk9wdGlvbnMsIGNyZWF0ZUFnZW50U2Vzc2lvbiB9IGZyb20gXCIuL2NvcmUvc2RrLmpzXCI7XG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlciB9IGZyb20gXCIuL2NvcmUvc2Vzc2lvbi1tYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc01hbmFnZXIgfSBmcm9tIFwiLi9jb3JlL3NldHRpbmdzLW1hbmFnZXIuanNcIjtcbmltcG9ydCB7IHByaW50VGltaW5ncywgdGltZSB9IGZyb20gXCIuL2NvcmUvdGltaW5ncy5qc1wiO1xuaW1wb3J0IHsgYWxsVG9vbHMgfSBmcm9tIFwiLi9jb3JlL3Rvb2xzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBydW5NaWdyYXRpb25zLCBzaG93RGVwcmVjYXRpb25XYXJuaW5ncyB9IGZyb20gXCIuL21pZ3JhdGlvbnMuanNcIjtcbmltcG9ydCB7IEludGVyYWN0aXZlTW9kZSwgcnVuUHJpbnRNb2RlLCBydW5ScGNNb2RlIH0gZnJvbSBcIi4vbW9kZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGluaXRUaGVtZSwgc3RvcFRoZW1lV2F0Y2hlciB9IGZyb20gXCIuL21vZGVzL2ludGVyYWN0aXZlL3RoZW1lL3RoZW1lLmpzXCI7XG5cbi8qKlxuICogUmVhZCBhbGwgY29udGVudCBmcm9tIHBpcGVkIHN0ZGluLlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgc3RkaW4gaXMgYSBUVFkgKGludGVyYWN0aXZlIHRlcm1pbmFsKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZFBpcGVkU3RkaW4oKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0Ly8gSWYgc3RkaW4gaXMgYSBUVFksIHdlJ3JlIHJ1bm5pbmcgaW50ZXJhY3RpdmVseSAtIGRvbid0IHJlYWQgc3RkaW5cblx0aWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0bGV0IGRhdGEgPSBcIlwiO1xuXHRcdHByb2Nlc3Muc3RkaW4uc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuXHRcdHByb2Nlc3Muc3RkaW4ub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuXHRcdFx0ZGF0YSArPSBjaHVuaztcblx0XHR9KTtcblx0XHRwcm9jZXNzLnN0ZGluLm9uKFwiZW5kXCIsICgpID0+IHtcblx0XHRcdHJlc29sdmUoZGF0YS50cmltKCkgfHwgdW5kZWZpbmVkKTtcblx0XHR9KTtcblx0XHRwcm9jZXNzLnN0ZGluLnJlc3VtZSgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVwb3J0U2V0dGluZ3NFcnJvcnMoc2V0dGluZ3NNYW5hZ2VyOiBTZXR0aW5nc01hbmFnZXIsIGNvbnRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBlcnJvcnMgPSBzZXR0aW5nc01hbmFnZXIuZHJhaW5FcnJvcnMoKTtcblx0Zm9yIChjb25zdCB7IHNjb3BlLCBlcnJvciB9IG9mIGVycm9ycykge1xuXHRcdGNvbnNvbGUuZXJyb3IoY2hhbGsueWVsbG93KGBXYXJuaW5nICgke2NvbnRleHR9LCAke3Njb3BlfSBzZXR0aW5ncyk6ICR7ZXJyb3IubWVzc2FnZX1gKSk7XG5cdFx0aWYgKGVycm9yLnN0YWNrKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGNoYWxrLmRpbShlcnJvci5zdGFjaykpO1xuXHRcdH1cblx0fVxufVxuXG50eXBlIFBhY2thZ2VDb21tYW5kID0gXCJpbnN0YWxsXCIgfCBcInJlbW92ZVwiIHwgXCJ1cGRhdGVcIiB8IFwibGlzdFwiO1xuXG5pbnRlcmZhY2UgUGFja2FnZUNvbW1hbmRPcHRpb25zIHtcblx0Y29tbWFuZDogUGFja2FnZUNvbW1hbmQ7XG5cdHNvdXJjZT86IHN0cmluZztcblx0bG9jYWw6IGJvb2xlYW47XG5cdGhlbHA6IGJvb2xlYW47XG5cdGludmFsaWRPcHRpb24/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VDb21tYW5kVXNhZ2UoY29tbWFuZDogUGFja2FnZUNvbW1hbmQpOiBzdHJpbmcge1xuXHRzd2l0Y2ggKGNvbW1hbmQpIHtcblx0XHRjYXNlIFwiaW5zdGFsbFwiOlxuXHRcdFx0cmV0dXJuIGAke0FQUF9OQU1FfSBpbnN0YWxsIDxzb3VyY2U+IFstbF1gO1xuXHRcdGNhc2UgXCJyZW1vdmVcIjpcblx0XHRcdHJldHVybiBgJHtBUFBfTkFNRX0gcmVtb3ZlIDxzb3VyY2U+IFstbF1gO1xuXHRcdGNhc2UgXCJ1cGRhdGVcIjpcblx0XHRcdHJldHVybiBgJHtBUFBfTkFNRX0gdXBkYXRlIFtzb3VyY2VdYDtcblx0XHRjYXNlIFwibGlzdFwiOlxuXHRcdFx0cmV0dXJuIGAke0FQUF9OQU1FfSBsaXN0YDtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmludFBhY2thZ2VDb21tYW5kSGVscChjb21tYW5kOiBQYWNrYWdlQ29tbWFuZCk6IHZvaWQge1xuXHRzd2l0Y2ggKGNvbW1hbmQpIHtcblx0XHRjYXNlIFwiaW5zdGFsbFwiOlxuXHRcdFx0Y29uc29sZS5sb2coYCR7Y2hhbGsuYm9sZChcIlVzYWdlOlwiKX1cbiAgJHtnZXRQYWNrYWdlQ29tbWFuZFVzYWdlKFwiaW5zdGFsbFwiKX1cblxuSW5zdGFsbCBhIHBhY2thZ2UgYW5kIGFkZCBpdCB0byBzZXR0aW5ncy5cblxuT3B0aW9uczpcbiAgLWwsIC0tbG9jYWwgICAgSW5zdGFsbCBwcm9qZWN0LWxvY2FsbHkgKC5waS9zZXR0aW5ncy5qc29uKVxuXG5FeGFtcGxlczpcbiAgJHtBUFBfTkFNRX0gaW5zdGFsbCBucG06QGZvby9iYXJcbiAgJHtBUFBfTkFNRX0gaW5zdGFsbCBnaXQ6Z2l0aHViLmNvbS91c2VyL3JlcG9cbiAgJHtBUFBfTkFNRX0gaW5zdGFsbCBnaXQ6Z2l0QGdpdGh1Yi5jb206dXNlci9yZXBvXG4gICR7QVBQX05BTUV9IGluc3RhbGwgaHR0cHM6Ly9naXRodWIuY29tL3VzZXIvcmVwb1xuICAke0FQUF9OQU1FfSBpbnN0YWxsIHNzaDovL2dpdEBnaXRodWIuY29tL3VzZXIvcmVwb1xuICAke0FQUF9OQU1FfSBpbnN0YWxsIC4vbG9jYWwvcGF0aFxuYCk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHRjYXNlIFwicmVtb3ZlXCI6XG5cdFx0XHRjb25zb2xlLmxvZyhgJHtjaGFsay5ib2xkKFwiVXNhZ2U6XCIpfVxuICAke2dldFBhY2thZ2VDb21tYW5kVXNhZ2UoXCJyZW1vdmVcIil9XG5cblJlbW92ZSBhIHBhY2thZ2UgYW5kIGl0cyBzb3VyY2UgZnJvbSBzZXR0aW5ncy5cblxuT3B0aW9uczpcbiAgLWwsIC0tbG9jYWwgICAgUmVtb3ZlIGZyb20gcHJvamVjdCBzZXR0aW5ncyAoLnBpL3NldHRpbmdzLmpzb24pXG5cbkV4YW1wbGU6XG4gICR7QVBQX05BTUV9IHJlbW92ZSBucG06QGZvby9iYXJcbmApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2FzZSBcInVwZGF0ZVwiOlxuXHRcdFx0Y29uc29sZS5sb2coYCR7Y2hhbGsuYm9sZChcIlVzYWdlOlwiKX1cbiAgJHtnZXRQYWNrYWdlQ29tbWFuZFVzYWdlKFwidXBkYXRlXCIpfVxuXG5VcGRhdGUgaW5zdGFsbGVkIHBhY2thZ2VzLlxuSWYgPHNvdXJjZT4gaXMgcHJvdmlkZWQsIG9ubHkgdGhhdCBwYWNrYWdlIGlzIHVwZGF0ZWQuXG5gKTtcblx0XHRcdHJldHVybjtcblxuXHRcdGNhc2UgXCJsaXN0XCI6XG5cdFx0XHRjb25zb2xlLmxvZyhgJHtjaGFsay5ib2xkKFwiVXNhZ2U6XCIpfVxuICAke2dldFBhY2thZ2VDb21tYW5kVXNhZ2UoXCJsaXN0XCIpfVxuXG5MaXN0IGluc3RhbGxlZCBwYWNrYWdlcyBmcm9tIHVzZXIgYW5kIHByb2plY3Qgc2V0dGluZ3MuXG5gKTtcblx0XHRcdHJldHVybjtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhY2thZ2VDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogUGFja2FnZUNvbW1hbmRPcHRpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgW2NvbW1hbmQsIC4uLnJlc3RdID0gYXJncztcblx0aWYgKGNvbW1hbmQgIT09IFwiaW5zdGFsbFwiICYmIGNvbW1hbmQgIT09IFwicmVtb3ZlXCIgJiYgY29tbWFuZCAhPT0gXCJ1cGRhdGVcIiAmJiBjb21tYW5kICE9PSBcImxpc3RcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRsZXQgbG9jYWwgPSBmYWxzZTtcblx0bGV0IGhlbHAgPSBmYWxzZTtcblx0bGV0IGludmFsaWRPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IHNvdXJjZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGZvciAoY29uc3QgYXJnIG9mIHJlc3QpIHtcblx0XHRpZiAoYXJnID09PSBcIi1oXCIgfHwgYXJnID09PSBcIi0taGVscFwiKSB7XG5cdFx0XHRoZWxwID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChhcmcgPT09IFwiLWxcIiB8fCBhcmcgPT09IFwiLS1sb2NhbFwiKSB7XG5cdFx0XHRpZiAoY29tbWFuZCA9PT0gXCJpbnN0YWxsXCIgfHwgY29tbWFuZCA9PT0gXCJyZW1vdmVcIikge1xuXHRcdFx0XHRsb2NhbCA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnZhbGlkT3B0aW9uID0gaW52YWxpZE9wdGlvbiA/PyBhcmc7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG5cdFx0XHRpbnZhbGlkT3B0aW9uID0gaW52YWxpZE9wdGlvbiA/PyBhcmc7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoIXNvdXJjZSkge1xuXHRcdFx0c291cmNlID0gYXJnO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGNvbW1hbmQsIHNvdXJjZSwgbG9jYWwsIGhlbHAsIGludmFsaWRPcHRpb24gfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGFja2FnZUNvbW1hbmQoYXJnczogc3RyaW5nW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3B0aW9ucyA9IHBhcnNlUGFja2FnZUNvbW1hbmQoYXJncyk7XG5cdGlmICghb3B0aW9ucykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmIChvcHRpb25zLmhlbHApIHtcblx0XHRwcmludFBhY2thZ2VDb21tYW5kSGVscChvcHRpb25zLmNvbW1hbmQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuaW52YWxpZE9wdGlvbikge1xuXHRcdGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGBVbmtub3duIG9wdGlvbiAke29wdGlvbnMuaW52YWxpZE9wdGlvbn0gZm9yIFwiJHtvcHRpb25zLmNvbW1hbmR9XCIuYCkpO1xuXHRcdGNvbnNvbGUuZXJyb3IoY2hhbGsuZGltKGBVc2UgXCIke0FQUF9OQU1FfSAtLWhlbHBcIiBvciBcIiR7Z2V0UGFja2FnZUNvbW1hbmRVc2FnZShvcHRpb25zLmNvbW1hbmQpfVwiLmApKTtcblx0XHRwcm9jZXNzLmV4aXRDb2RlID0gMTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnN0IHNvdXJjZSA9IG9wdGlvbnMuc291cmNlO1xuXHRpZiAoKG9wdGlvbnMuY29tbWFuZCA9PT0gXCJpbnN0YWxsXCIgfHwgb3B0aW9ucy5jb21tYW5kID09PSBcInJlbW92ZVwiKSAmJiAhc291cmNlKSB7XG5cdFx0Y29uc29sZS5lcnJvcihjaGFsay5yZWQoYE1pc3NpbmcgJHtvcHRpb25zLmNvbW1hbmR9IHNvdXJjZS5gKSk7XG5cdFx0Y29uc29sZS5lcnJvcihjaGFsay5kaW0oYFVzYWdlOiAke2dldFBhY2thZ2VDb21tYW5kVXNhZ2Uob3B0aW9ucy5jb21tYW5kKX1gKSk7XG5cdFx0cHJvY2Vzcy5leGl0Q29kZSA9IDE7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXHRjb25zdCBhZ2VudERpciA9IGdldEFnZW50RGlyKCk7XG5cdGNvbnN0IHNldHRpbmdzTWFuYWdlciA9IFNldHRpbmdzTWFuYWdlci5jcmVhdGUoY3dkLCBhZ2VudERpcik7XG5cdHJlcG9ydFNldHRpbmdzRXJyb3JzKHNldHRpbmdzTWFuYWdlciwgXCJwYWNrYWdlIGNvbW1hbmRcIik7XG5cdGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gbmV3IERlZmF1bHRQYWNrYWdlTWFuYWdlcih7IGN3ZCwgYWdlbnREaXIsIHNldHRpbmdzTWFuYWdlciB9KTtcblxuXHRwYWNrYWdlTWFuYWdlci5zZXRQcm9ncmVzc0NhbGxiYWNrKChldmVudCkgPT4ge1xuXHRcdGlmIChldmVudC50eXBlID09PSBcInN0YXJ0XCIpIHtcblx0XHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLmRpbShgJHtldmVudC5tZXNzYWdlfVxcbmApKTtcblx0XHR9XG5cdH0pO1xuXG5cdHRyeSB7XG5cdFx0c3dpdGNoIChvcHRpb25zLmNvbW1hbmQpIHtcblx0XHRcdGNhc2UgXCJpbnN0YWxsXCI6XG5cdFx0XHRcdGF3YWl0IHBhY2thZ2VNYW5hZ2VyLmluc3RhbGwoc291cmNlISwgeyBsb2NhbDogb3B0aW9ucy5sb2NhbCB9KTtcblx0XHRcdFx0cGFja2FnZU1hbmFnZXIuYWRkU291cmNlVG9TZXR0aW5ncyhzb3VyY2UhLCB7IGxvY2FsOiBvcHRpb25zLmxvY2FsIH0pO1xuXHRcdFx0XHRjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgSW5zdGFsbGVkICR7c291cmNlfWApKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRcdGNhc2UgXCJyZW1vdmVcIjoge1xuXHRcdFx0XHRhd2FpdCBwYWNrYWdlTWFuYWdlci5yZW1vdmUoc291cmNlISwgeyBsb2NhbDogb3B0aW9ucy5sb2NhbCB9KTtcblx0XHRcdFx0Y29uc3QgcmVtb3ZlZCA9IHBhY2thZ2VNYW5hZ2VyLnJlbW92ZVNvdXJjZUZyb21TZXR0aW5ncyhzb3VyY2UhLCB7IGxvY2FsOiBvcHRpb25zLmxvY2FsIH0pO1xuXHRcdFx0XHRpZiAoIXJlbW92ZWQpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgTm8gbWF0Y2hpbmcgcGFja2FnZSBmb3VuZCBmb3IgJHtzb3VyY2V9YCkpO1xuXHRcdFx0XHRcdHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBSZW1vdmVkICR7c291cmNlfWApKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGNhc2UgXCJsaXN0XCI6IHtcblx0XHRcdFx0Y29uc3QgZ2xvYmFsU2V0dGluZ3MgPSBzZXR0aW5nc01hbmFnZXIuZ2V0R2xvYmFsU2V0dGluZ3MoKTtcblx0XHRcdFx0Y29uc3QgcHJvamVjdFNldHRpbmdzID0gc2V0dGluZ3NNYW5hZ2VyLmdldFByb2plY3RTZXR0aW5ncygpO1xuXHRcdFx0XHRjb25zdCBnbG9iYWxQYWNrYWdlcyA9IGdsb2JhbFNldHRpbmdzLnBhY2thZ2VzID8/IFtdO1xuXHRcdFx0XHRjb25zdCBwcm9qZWN0UGFja2FnZXMgPSBwcm9qZWN0U2V0dGluZ3MucGFja2FnZXMgPz8gW107XG5cblx0XHRcdFx0aWYgKGdsb2JhbFBhY2thZ2VzLmxlbmd0aCA9PT0gMCAmJiBwcm9qZWN0UGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coY2hhbGsuZGltKFwiTm8gcGFja2FnZXMgaW5zdGFsbGVkLlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmb3JtYXRQYWNrYWdlID0gKHBrZzogKHR5cGVvZiBnbG9iYWxQYWNrYWdlcylbbnVtYmVyXSwgc2NvcGU6IFwidXNlclwiIHwgXCJwcm9qZWN0XCIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzb3VyY2UgPSB0eXBlb2YgcGtnID09PSBcInN0cmluZ1wiID8gcGtnIDogcGtnLnNvdXJjZTtcblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHR5cGVvZiBwa2cgPT09IFwib2JqZWN0XCI7XG5cdFx0XHRcdFx0Y29uc3QgZGlzcGxheSA9IGZpbHRlcmVkID8gYCR7c291cmNlfSAoZmlsdGVyZWQpYCA6IHNvdXJjZTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhgICAke2Rpc3BsYXl9YCk7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aCA9IHBhY2thZ2VNYW5hZ2VyLmdldEluc3RhbGxlZFBhdGgoc291cmNlLCBzY29wZSk7XG5cdFx0XHRcdFx0aWYgKHBhdGgpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICAgICR7cGF0aH1gKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChnbG9iYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coY2hhbGsuYm9sZChcIlVzZXIgcGFja2FnZXM6XCIpKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBrZyBvZiBnbG9iYWxQYWNrYWdlcykge1xuXHRcdFx0XHRcdFx0Zm9ybWF0UGFja2FnZShwa2csIFwidXNlclwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHJvamVjdFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRpZiAoZ2xvYmFsUGFja2FnZXMubGVuZ3RoID4gMCkgY29uc29sZS5sb2coKTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiUHJvamVjdCBwYWNrYWdlczpcIikpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcGtnIG9mIHByb2plY3RQYWNrYWdlcykge1xuXHRcdFx0XHRcdFx0Zm9ybWF0UGFja2FnZShwa2csIFwicHJvamVjdFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSBcInVwZGF0ZVwiOlxuXHRcdFx0XHRhd2FpdCBwYWNrYWdlTWFuYWdlci51cGRhdGUoc291cmNlKTtcblx0XHRcdFx0aWYgKHNvdXJjZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBVcGRhdGVkICR7c291cmNlfWApKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIlVwZGF0ZWQgcGFja2FnZXNcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gcGFja2FnZSBjb21tYW5kIGVycm9yXCI7XG5cdFx0Y29uc29sZS5lcnJvcihjaGFsay5yZWQoYEVycm9yOiAke21lc3NhZ2V9YCkpO1xuXHRcdHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVJbml0aWFsTWVzc2FnZShcblx0cGFyc2VkOiBBcmdzLFxuXHRhdXRvUmVzaXplSW1hZ2VzOiBib29sZWFuLFxuKTogUHJvbWlzZTx7XG5cdGluaXRpYWxNZXNzYWdlPzogc3RyaW5nO1xuXHRpbml0aWFsSW1hZ2VzPzogSW1hZ2VDb250ZW50W107XG59PiB7XG5cdGlmIChwYXJzZWQuZmlsZUFyZ3MubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Y29uc3QgeyB0ZXh0LCBpbWFnZXMgfSA9IGF3YWl0IHByb2Nlc3NGaWxlQXJndW1lbnRzKHBhcnNlZC5maWxlQXJncywgeyBhdXRvUmVzaXplSW1hZ2VzIH0pO1xuXG5cdGxldCBpbml0aWFsTWVzc2FnZTogc3RyaW5nO1xuXHRpZiAocGFyc2VkLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRpbml0aWFsTWVzc2FnZSA9IHRleHQgKyBwYXJzZWQubWVzc2FnZXNbMF07XG5cdFx0cGFyc2VkLm1lc3NhZ2VzLnNoaWZ0KCk7XG5cdH0gZWxzZSB7XG5cdFx0aW5pdGlhbE1lc3NhZ2UgPSB0ZXh0O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpbml0aWFsTWVzc2FnZSxcblx0XHRpbml0aWFsSW1hZ2VzOiBpbWFnZXMubGVuZ3RoID4gMCA/IGltYWdlcyA6IHVuZGVmaW5lZCxcblx0fTtcbn1cblxuLyoqIFJlc3VsdCBmcm9tIHJlc29sdmluZyBhIHNlc3Npb24gYXJndW1lbnQgKi9cbnR5cGUgUmVzb2x2ZWRTZXNzaW9uID1cblx0fCB7IHR5cGU6IFwicGF0aFwiOyBwYXRoOiBzdHJpbmcgfSAvLyBEaXJlY3QgZmlsZSBwYXRoXG5cdHwgeyB0eXBlOiBcImxvY2FsXCI7IHBhdGg6IHN0cmluZyB9IC8vIEZvdW5kIGluIGN1cnJlbnQgcHJvamVjdFxuXHR8IHsgdHlwZTogXCJnbG9iYWxcIjsgcGF0aDogc3RyaW5nOyBjd2Q6IHN0cmluZyB9IC8vIEZvdW5kIGluIGRpZmZlcmVudCBwcm9qZWN0XG5cdHwgeyB0eXBlOiBcIm5vdF9mb3VuZFwiOyBhcmc6IHN0cmluZyB9OyAvLyBOb3QgZm91bmQgYW55d2hlcmVcblxuLyoqXG4gKiBSZXNvbHZlIGEgc2Vzc2lvbiBhcmd1bWVudCB0byBhIGZpbGUgcGF0aC5cbiAqIElmIGl0IGxvb2tzIGxpa2UgYSBwYXRoLCB1c2UgYXMtaXMuIE90aGVyd2lzZSB0cnkgdG8gbWF0Y2ggYXMgc2Vzc2lvbiBJRCBwcmVmaXguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTZXNzaW9uUGF0aChzZXNzaW9uQXJnOiBzdHJpbmcsIGN3ZDogc3RyaW5nLCBzZXNzaW9uRGlyPzogc3RyaW5nKTogUHJvbWlzZTxSZXNvbHZlZFNlc3Npb24+IHtcblx0Ly8gSWYgaXQgbG9va3MgbGlrZSBhIGZpbGUgcGF0aCwgdXNlIGFzLWlzXG5cdGlmIChzZXNzaW9uQXJnLmluY2x1ZGVzKFwiL1wiKSB8fCBzZXNzaW9uQXJnLmluY2x1ZGVzKFwiXFxcXFwiKSB8fCBzZXNzaW9uQXJnLmVuZHNXaXRoKFwiLmpzb25sXCIpKSB7XG5cdFx0cmV0dXJuIHsgdHlwZTogXCJwYXRoXCIsIHBhdGg6IHNlc3Npb25BcmcgfTtcblx0fVxuXG5cdC8vIFRyeSB0byBtYXRjaCBhcyBzZXNzaW9uIElEIGluIGN1cnJlbnQgcHJvamVjdCBmaXJzdFxuXHRjb25zdCBsb2NhbFNlc3Npb25zID0gYXdhaXQgU2Vzc2lvbk1hbmFnZXIubGlzdChjd2QsIHNlc3Npb25EaXIpO1xuXHRjb25zdCBsb2NhbE1hdGNoZXMgPSBsb2NhbFNlc3Npb25zLmZpbHRlcigocykgPT4gcy5pZC5zdGFydHNXaXRoKHNlc3Npb25BcmcpKTtcblxuXHRpZiAobG9jYWxNYXRjaGVzLmxlbmd0aCA+PSAxKSB7XG5cdFx0cmV0dXJuIHsgdHlwZTogXCJsb2NhbFwiLCBwYXRoOiBsb2NhbE1hdGNoZXNbMF0ucGF0aCB9O1xuXHR9XG5cblx0Ly8gVHJ5IGdsb2JhbCBzZWFyY2ggYWNyb3NzIGFsbCBwcm9qZWN0c1xuXHRjb25zdCBhbGxTZXNzaW9ucyA9IGF3YWl0IFNlc3Npb25NYW5hZ2VyLmxpc3RBbGwoKTtcblx0Y29uc3QgZ2xvYmFsTWF0Y2hlcyA9IGFsbFNlc3Npb25zLmZpbHRlcigocykgPT4gcy5pZC5zdGFydHNXaXRoKHNlc3Npb25BcmcpKTtcblxuXHRpZiAoZ2xvYmFsTWF0Y2hlcy5sZW5ndGggPj0gMSkge1xuXHRcdGNvbnN0IG1hdGNoID0gZ2xvYmFsTWF0Y2hlc1swXTtcblx0XHRyZXR1cm4geyB0eXBlOiBcImdsb2JhbFwiLCBwYXRoOiBtYXRjaC5wYXRoLCBjd2Q6IG1hdGNoLmN3ZCB9O1xuXHR9XG5cblx0Ly8gTm90IGZvdW5kIGFueXdoZXJlXG5cdHJldHVybiB7IHR5cGU6IFwibm90X2ZvdW5kXCIsIGFyZzogc2Vzc2lvbkFyZyB9O1xufVxuXG4vKiogUHJvbXB0IHVzZXIgZm9yIHllcy9ubyBjb25maXJtYXRpb24gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdENvbmZpcm0obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnN0IHJsID0gY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcblx0XHR9KTtcblx0XHRybC5xdWVzdGlvbihgJHttZXNzYWdlfSBbeS9OXSBgLCAoYW5zd2VyKSA9PiB7XG5cdFx0XHRybC5jbG9zZSgpO1xuXHRcdFx0cmVzb2x2ZShhbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gXCJ5XCIgfHwgYW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IFwieWVzXCIpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbk1hbmFnZXIocGFyc2VkOiBBcmdzLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvbk1hbmFnZXIgfCB1bmRlZmluZWQ+IHtcblx0aWYgKHBhcnNlZC5ub1Nlc3Npb24pIHtcblx0XHRyZXR1cm4gU2Vzc2lvbk1hbmFnZXIuaW5NZW1vcnkoKTtcblx0fVxuXHRpZiAocGFyc2VkLnNlc3Npb24pIHtcblx0XHRjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVTZXNzaW9uUGF0aChwYXJzZWQuc2Vzc2lvbiwgY3dkLCBwYXJzZWQuc2Vzc2lvbkRpcik7XG5cblx0XHRzd2l0Y2ggKHJlc29sdmVkLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRjYXNlIFwibG9jYWxcIjpcblx0XHRcdFx0cmV0dXJuIFNlc3Npb25NYW5hZ2VyLm9wZW4ocmVzb2x2ZWQucGF0aCwgcGFyc2VkLnNlc3Npb25EaXIpO1xuXG5cdFx0XHRjYXNlIFwiZ2xvYmFsXCI6IHtcblx0XHRcdFx0Ly8gU2Vzc2lvbiBmb3VuZCBpbiBkaWZmZXJlbnQgcHJvamVjdCAtIGFzayB1c2VyIGlmIHRoZXkgd2FudCB0byBmb3JrXG5cdFx0XHRcdGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgU2Vzc2lvbiBmb3VuZCBpbiBkaWZmZXJlbnQgcHJvamVjdDogJHtyZXNvbHZlZC5jd2R9YCkpO1xuXHRcdFx0XHRjb25zdCBzaG91bGRGb3JrID0gYXdhaXQgcHJvbXB0Q29uZmlybShcIkZvcmsgdGhpcyBzZXNzaW9uIGludG8gY3VycmVudCBkaXJlY3Rvcnk/XCIpO1xuXHRcdFx0XHRpZiAoIXNob3VsZEZvcmspIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJBYm9ydGVkLlwiKSk7XG5cdFx0XHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBTZXNzaW9uTWFuYWdlci5mb3JrRnJvbShyZXNvbHZlZC5wYXRoLCBjd2QsIHBhcnNlZC5zZXNzaW9uRGlyKTtcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSBcIm5vdF9mb3VuZFwiOlxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgTm8gc2Vzc2lvbiBmb3VuZCBtYXRjaGluZyAnJHtyZXNvbHZlZC5hcmd9J2ApKTtcblx0XHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblx0fVxuXHRpZiAocGFyc2VkLmNvbnRpbnVlKSB7XG5cdFx0cmV0dXJuIFNlc3Npb25NYW5hZ2VyLmNvbnRpbnVlUmVjZW50KGN3ZCwgcGFyc2VkLnNlc3Npb25EaXIpO1xuXHR9XG5cdC8vIC0tcmVzdW1lIGlzIGhhbmRsZWQgc2VwYXJhdGVseSAobmVlZHMgcGlja2VyIFVJKVxuXHQvLyBJZiAtLXNlc3Npb24tZGlyIHByb3ZpZGVkIHdpdGhvdXQgLS1jb250aW51ZS8tLXJlc3VtZSwgY3JlYXRlIG5ldyBzZXNzaW9uIHRoZXJlXG5cdGlmIChwYXJzZWQuc2Vzc2lvbkRpcikge1xuXHRcdHJldHVybiBTZXNzaW9uTWFuYWdlci5jcmVhdGUoY3dkLCBwYXJzZWQuc2Vzc2lvbkRpcik7XG5cdH1cblx0Ly8gRGVmYXVsdCBjYXNlIChuZXcgc2Vzc2lvbikgcmV0dXJucyB1bmRlZmluZWQsIFNESyB3aWxsIGNyZWF0ZSBvbmVcblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRTZXNzaW9uT3B0aW9ucyhcblx0cGFyc2VkOiBBcmdzLFxuXHRzY29wZWRNb2RlbHM6IFNjb3BlZE1vZGVsW10sXG5cdHNlc3Npb25NYW5hZ2VyOiBTZXNzaW9uTWFuYWdlciB8IHVuZGVmaW5lZCxcblx0bW9kZWxSZWdpc3RyeTogTW9kZWxSZWdpc3RyeSxcblx0c2V0dGluZ3NNYW5hZ2VyOiBTZXR0aW5nc01hbmFnZXIsXG4pOiB7IG9wdGlvbnM6IENyZWF0ZUFnZW50U2Vzc2lvbk9wdGlvbnM7IGNsaVRoaW5raW5nRnJvbU1vZGVsOiBib29sZWFuIH0ge1xuXHRjb25zdCBvcHRpb25zOiBDcmVhdGVBZ2VudFNlc3Npb25PcHRpb25zID0ge307XG5cdGxldCBjbGlUaGlua2luZ0Zyb21Nb2RlbCA9IGZhbHNlO1xuXG5cdGlmIChzZXNzaW9uTWFuYWdlcikge1xuXHRcdG9wdGlvbnMuc2Vzc2lvbk1hbmFnZXIgPSBzZXNzaW9uTWFuYWdlcjtcblx0fVxuXG5cdC8vIE1vZGVsIGZyb20gQ0xJXG5cdC8vIC0gc3VwcG9ydHMgLS1wcm92aWRlciA8bmFtZT4gLS1tb2RlbCA8cGF0dGVybj5cblx0Ly8gLSBzdXBwb3J0cyAtLW1vZGVsIDxwcm92aWRlcj4vPHBhdHRlcm4+XG5cdGlmIChwYXJzZWQubW9kZWwpIHtcblx0XHRjb25zdCByZXNvbHZlZCA9IHJlc29sdmVDbGlNb2RlbCh7XG5cdFx0XHRjbGlQcm92aWRlcjogcGFyc2VkLnByb3ZpZGVyLFxuXHRcdFx0Y2xpTW9kZWw6IHBhcnNlZC5tb2RlbCxcblx0XHRcdG1vZGVsUmVnaXN0cnksXG5cdFx0fSk7XG5cdFx0aWYgKHJlc29sdmVkLndhcm5pbmcpIHtcblx0XHRcdGNvbnNvbGUud2FybihjaGFsay55ZWxsb3coYFdhcm5pbmc6ICR7cmVzb2x2ZWQud2FybmluZ31gKSk7XG5cdFx0fVxuXHRcdGlmIChyZXNvbHZlZC5lcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihjaGFsay5yZWQocmVzb2x2ZWQuZXJyb3IpKTtcblx0XHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0XHR9XG5cdFx0aWYgKHJlc29sdmVkLm1vZGVsKSB7XG5cdFx0XHRvcHRpb25zLm1vZGVsID0gcmVzb2x2ZWQubW9kZWw7XG5cdFx0XHQvLyBBbGxvdyBcIi0tbW9kZWwgPHBhdHRlcm4+Ojx0aGlua2luZz5cIiBhcyBhIHNob3J0aGFuZC5cblx0XHRcdC8vIEV4cGxpY2l0IC0tdGhpbmtpbmcgc3RpbGwgdGFrZXMgcHJlY2VkZW5jZSAoYXBwbGllZCBsYXRlcikuXG5cdFx0XHRpZiAoIXBhcnNlZC50aGlua2luZyAmJiByZXNvbHZlZC50aGlua2luZ0xldmVsKSB7XG5cdFx0XHRcdG9wdGlvbnMudGhpbmtpbmdMZXZlbCA9IHJlc29sdmVkLnRoaW5raW5nTGV2ZWw7XG5cdFx0XHRcdGNsaVRoaW5raW5nRnJvbU1vZGVsID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIW9wdGlvbnMubW9kZWwgJiYgc2NvcGVkTW9kZWxzLmxlbmd0aCA+IDAgJiYgIXBhcnNlZC5jb250aW51ZSAmJiAhcGFyc2VkLnJlc3VtZSkge1xuXHRcdC8vIENoZWNrIGlmIHNhdmVkIGRlZmF1bHQgaXMgaW4gc2NvcGVkIG1vZGVscyAtIHVzZSBpdCBpZiBzbywgb3RoZXJ3aXNlIGZpcnN0IHNjb3BlZCBtb2RlbFxuXHRcdGNvbnN0IHNhdmVkUHJvdmlkZXIgPSBzZXR0aW5nc01hbmFnZXIuZ2V0RGVmYXVsdFByb3ZpZGVyKCk7XG5cdFx0Y29uc3Qgc2F2ZWRNb2RlbElkID0gc2V0dGluZ3NNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpO1xuXHRcdGNvbnN0IHNhdmVkTW9kZWwgPSBzYXZlZFByb3ZpZGVyICYmIHNhdmVkTW9kZWxJZCA/IG1vZGVsUmVnaXN0cnkuZmluZChzYXZlZFByb3ZpZGVyLCBzYXZlZE1vZGVsSWQpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNhdmVkSW5TY29wZSA9IHNhdmVkTW9kZWwgPyBzY29wZWRNb2RlbHMuZmluZCgoc20pID0+IG1vZGVsc0FyZUVxdWFsKHNtLm1vZGVsLCBzYXZlZE1vZGVsKSkgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2F2ZWRJblNjb3BlKSB7XG5cdFx0XHRvcHRpb25zLm1vZGVsID0gc2F2ZWRJblNjb3BlLm1vZGVsO1xuXHRcdFx0Ly8gVXNlIHRoaW5raW5nIGxldmVsIGZyb20gc2NvcGVkIG1vZGVsIGNvbmZpZyBpZiBleHBsaWNpdGx5IHNldFxuXHRcdFx0aWYgKCFwYXJzZWQudGhpbmtpbmcgJiYgc2F2ZWRJblNjb3BlLnRoaW5raW5nTGV2ZWwpIHtcblx0XHRcdFx0b3B0aW9ucy50aGlua2luZ0xldmVsID0gc2F2ZWRJblNjb3BlLnRoaW5raW5nTGV2ZWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9wdGlvbnMubW9kZWwgPSBzY29wZWRNb2RlbHNbMF0ubW9kZWw7XG5cdFx0XHQvLyBVc2UgdGhpbmtpbmcgbGV2ZWwgZnJvbSBmaXJzdCBzY29wZWQgbW9kZWwgaWYgZXhwbGljaXRseSBzZXRcblx0XHRcdGlmICghcGFyc2VkLnRoaW5raW5nICYmIHNjb3BlZE1vZGVsc1swXS50aGlua2luZ0xldmVsKSB7XG5cdFx0XHRcdG9wdGlvbnMudGhpbmtpbmdMZXZlbCA9IHNjb3BlZE1vZGVsc1swXS50aGlua2luZ0xldmVsO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoaW5raW5nIGxldmVsIGZyb20gQ0xJICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc2NvcGVkIG1vZGVsIHRoaW5raW5nIGxldmVscyBzZXQgYWJvdmUpXG5cdGlmIChwYXJzZWQudGhpbmtpbmcpIHtcblx0XHRvcHRpb25zLnRoaW5raW5nTGV2ZWwgPSBwYXJzZWQudGhpbmtpbmc7XG5cdH1cblxuXHQvLyBTY29wZWQgbW9kZWxzIGZvciBDdHJsK1AgY3ljbGluZyAtIGZpbGwgaW4gZGVmYXVsdCB0aGlua2luZyBsZXZlbCBmb3IgbW9kZWxzIHdpdGhvdXQgZXhwbGljaXQgbGV2ZWxcblx0aWYgKHNjb3BlZE1vZGVscy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZGVmYXVsdFRoaW5raW5nTGV2ZWwgPSBzZXR0aW5nc01hbmFnZXIuZ2V0RGVmYXVsdFRoaW5raW5nTGV2ZWwoKSA/PyBERUZBVUxUX1RISU5LSU5HX0xFVkVMO1xuXHRcdG9wdGlvbnMuc2NvcGVkTW9kZWxzID0gc2NvcGVkTW9kZWxzLm1hcCgoc20pID0+ICh7XG5cdFx0XHRtb2RlbDogc20ubW9kZWwsXG5cdFx0XHR0aGlua2luZ0xldmVsOiBzbS50aGlua2luZ0xldmVsID8/IGRlZmF1bHRUaGlua2luZ0xldmVsLFxuXHRcdH0pKTtcblx0fVxuXG5cdC8vIEFQSSBrZXkgZnJvbSBDTEkgLSBzZXQgaW4gYXV0aFN0b3JhZ2Vcblx0Ly8gKGhhbmRsZWQgYnkgY2FsbGVyIGJlZm9yZSBjcmVhdGVBZ2VudFNlc3Npb24pXG5cblx0Ly8gVG9vbHNcblx0aWYgKHBhcnNlZC5ub1Rvb2xzKSB7XG5cdFx0Ly8gLS1uby10b29sczogc3RhcnQgd2l0aCBubyBidWlsdC1pbiB0b29sc1xuXHRcdC8vIC0tdG9vbHMgY2FuIHN0aWxsIGFkZCBzcGVjaWZpYyBvbmVzIGJhY2tcblx0XHRpZiAocGFyc2VkLnRvb2xzICYmIHBhcnNlZC50b29scy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcHRpb25zLnRvb2xzID0gcGFyc2VkLnRvb2xzLm1hcCgobmFtZSkgPT4gYWxsVG9vbHNbbmFtZV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25zLnRvb2xzID0gW107XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHBhcnNlZC50b29scykge1xuXHRcdG9wdGlvbnMudG9vbHMgPSBwYXJzZWQudG9vbHMubWFwKChuYW1lKSA9PiBhbGxUb29sc1tuYW1lXSk7XG5cdH1cblxuXHRyZXR1cm4geyBvcHRpb25zLCBjbGlUaGlua2luZ0Zyb21Nb2RlbCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVDb25maWdDb21tYW5kKGFyZ3M6IHN0cmluZ1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGlmIChhcmdzWzBdICE9PSBcImNvbmZpZ1wiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblx0Y29uc3QgYWdlbnREaXIgPSBnZXRBZ2VudERpcigpO1xuXHRjb25zdCBzZXR0aW5nc01hbmFnZXIgPSBTZXR0aW5nc01hbmFnZXIuY3JlYXRlKGN3ZCwgYWdlbnREaXIpO1xuXHRyZXBvcnRTZXR0aW5nc0Vycm9ycyhzZXR0aW5nc01hbmFnZXIsIFwiY29uZmlnIGNvbW1hbmRcIik7XG5cdGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gbmV3IERlZmF1bHRQYWNrYWdlTWFuYWdlcih7IGN3ZCwgYWdlbnREaXIsIHNldHRpbmdzTWFuYWdlciB9KTtcblxuXHRjb25zdCByZXNvbHZlZFBhdGhzID0gYXdhaXQgcGFja2FnZU1hbmFnZXIucmVzb2x2ZSgpO1xuXG5cdGF3YWl0IHNlbGVjdENvbmZpZyh7XG5cdFx0cmVzb2x2ZWRQYXRocyxcblx0XHRzZXR0aW5nc01hbmFnZXIsXG5cdFx0Y3dkLFxuXHRcdGFnZW50RGlyLFxuXHR9KTtcblxuXHRwcm9jZXNzLmV4aXQoMCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3M6IHN0cmluZ1tdKSB7XG5cdGlmIChhd2FpdCBoYW5kbGVQYWNrYWdlQ29tbWFuZChhcmdzKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChhd2FpdCBoYW5kbGVDb25maWdDb21tYW5kKGFyZ3MpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUnVuIG1pZ3JhdGlvbnMgKHBhc3MgY3dkIGZvciBwcm9qZWN0LWxvY2FsIG1pZ3JhdGlvbnMpXG5cdGNvbnN0IHsgbWlncmF0ZWRBdXRoUHJvdmlkZXJzOiBtaWdyYXRlZFByb3ZpZGVycywgZGVwcmVjYXRpb25XYXJuaW5ncyB9ID0gcnVuTWlncmF0aW9ucyhwcm9jZXNzLmN3ZCgpKTtcblxuXHQvLyBGaXJzdCBwYXNzOiBwYXJzZSBhcmdzIHRvIGdldCAtLWV4dGVuc2lvbiBwYXRoc1xuXHRjb25zdCBmaXJzdFBhc3MgPSBwYXJzZUFyZ3MoYXJncyk7XG5cblx0Ly8gRWFybHkgbG9hZCBleHRlbnNpb25zIHRvIGRpc2NvdmVyIHRoZWlyIENMSSBmbGFnc1xuXHRjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXHRjb25zdCBhZ2VudERpciA9IGdldEFnZW50RGlyKCk7XG5cdGNvbnN0IHNldHRpbmdzTWFuYWdlciA9IFNldHRpbmdzTWFuYWdlci5jcmVhdGUoY3dkLCBhZ2VudERpcik7XG5cdHJlcG9ydFNldHRpbmdzRXJyb3JzKHNldHRpbmdzTWFuYWdlciwgXCJzdGFydHVwXCIpO1xuXHRjb25zdCBhdXRoU3RvcmFnZSA9IG5ldyBBdXRoU3RvcmFnZSgpO1xuXHRjb25zdCBtb2RlbFJlZ2lzdHJ5ID0gbmV3IE1vZGVsUmVnaXN0cnkoYXV0aFN0b3JhZ2UsIGdldE1vZGVsc1BhdGgoKSk7XG5cblx0Y29uc3QgcmVzb3VyY2VMb2FkZXIgPSBuZXcgRGVmYXVsdFJlc291cmNlTG9hZGVyKHtcblx0XHRjd2QsXG5cdFx0YWdlbnREaXIsXG5cdFx0c2V0dGluZ3NNYW5hZ2VyLFxuXHRcdGFkZGl0aW9uYWxFeHRlbnNpb25QYXRoczogZmlyc3RQYXNzLmV4dGVuc2lvbnMsXG5cdFx0YWRkaXRpb25hbFNraWxsUGF0aHM6IGZpcnN0UGFzcy5za2lsbHMsXG5cdFx0YWRkaXRpb25hbFByb21wdFRlbXBsYXRlUGF0aHM6IGZpcnN0UGFzcy5wcm9tcHRUZW1wbGF0ZXMsXG5cdFx0YWRkaXRpb25hbFRoZW1lUGF0aHM6IGZpcnN0UGFzcy50aGVtZXMsXG5cdFx0bm9FeHRlbnNpb25zOiBmaXJzdFBhc3Mubm9FeHRlbnNpb25zLFxuXHRcdG5vU2tpbGxzOiBmaXJzdFBhc3Mubm9Ta2lsbHMsXG5cdFx0bm9Qcm9tcHRUZW1wbGF0ZXM6IGZpcnN0UGFzcy5ub1Byb21wdFRlbXBsYXRlcyxcblx0XHRub1RoZW1lczogZmlyc3RQYXNzLm5vVGhlbWVzLFxuXHRcdHN5c3RlbVByb21wdDogZmlyc3RQYXNzLnN5c3RlbVByb21wdCxcblx0XHRhcHBlbmRTeXN0ZW1Qcm9tcHQ6IGZpcnN0UGFzcy5hcHBlbmRTeXN0ZW1Qcm9tcHQsXG5cdH0pO1xuXHRhd2FpdCByZXNvdXJjZUxvYWRlci5yZWxvYWQoKTtcblx0dGltZShcInJlc291cmNlTG9hZGVyLnJlbG9hZFwiKTtcblxuXHRjb25zdCBleHRlbnNpb25zUmVzdWx0OiBMb2FkRXh0ZW5zaW9uc1Jlc3VsdCA9IHJlc291cmNlTG9hZGVyLmdldEV4dGVuc2lvbnMoKTtcblx0Zm9yIChjb25zdCB7IHBhdGgsIGVycm9yIH0gb2YgZXh0ZW5zaW9uc1Jlc3VsdC5lcnJvcnMpIHtcblx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgRmFpbGVkIHRvIGxvYWQgZXh0ZW5zaW9uIFwiJHtwYXRofVwiOiAke2Vycm9yfWApKTtcblx0fVxuXG5cdC8vIEFwcGx5IHBlbmRpbmcgcHJvdmlkZXIgcmVnaXN0cmF0aW9ucyBmcm9tIGV4dGVuc2lvbnMgaW1tZWRpYXRlbHlcblx0Ly8gc28gdGhleSdyZSBhdmFpbGFibGUgZm9yIG1vZGVsIHJlc29sdXRpb24gYmVmb3JlIEFnZW50U2Vzc2lvbiBpcyBjcmVhdGVkXG5cdGZvciAoY29uc3QgeyBuYW1lLCBjb25maWcgfSBvZiBleHRlbnNpb25zUmVzdWx0LnJ1bnRpbWUucGVuZGluZ1Byb3ZpZGVyUmVnaXN0cmF0aW9ucykge1xuXHRcdG1vZGVsUmVnaXN0cnkucmVnaXN0ZXJQcm92aWRlcihuYW1lLCBjb25maWcpO1xuXHR9XG5cdGV4dGVuc2lvbnNSZXN1bHQucnVudGltZS5wZW5kaW5nUHJvdmlkZXJSZWdpc3RyYXRpb25zID0gW107XG5cblx0Y29uc3QgZXh0ZW5zaW9uRmxhZ3MgPSBuZXcgTWFwPHN0cmluZywgeyB0eXBlOiBcImJvb2xlYW5cIiB8IFwic3RyaW5nXCIgfT4oKTtcblx0Zm9yIChjb25zdCBleHQgb2YgZXh0ZW5zaW9uc1Jlc3VsdC5leHRlbnNpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgZmxhZ10gb2YgZXh0LmZsYWdzKSB7XG5cdFx0XHRleHRlbnNpb25GbGFncy5zZXQobmFtZSwgeyB0eXBlOiBmbGFnLnR5cGUgfSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2Vjb25kIHBhc3M6IHBhcnNlIGFyZ3Mgd2l0aCBleHRlbnNpb24gZmxhZ3Ncblx0Y29uc3QgcGFyc2VkID0gcGFyc2VBcmdzKGFyZ3MsIGV4dGVuc2lvbkZsYWdzKTtcblxuXHQvLyBQYXNzIGZsYWcgdmFsdWVzIHRvIGV4dGVuc2lvbnMgdmlhIHJ1bnRpbWVcblx0Zm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHBhcnNlZC51bmtub3duRmxhZ3MpIHtcblx0XHRleHRlbnNpb25zUmVzdWx0LnJ1bnRpbWUuZmxhZ1ZhbHVlcy5zZXQobmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0aWYgKHBhcnNlZC52ZXJzaW9uKSB7XG5cdFx0Y29uc29sZS5sb2coVkVSU0lPTik7XG5cdFx0cHJvY2Vzcy5leGl0KDApO1xuXHR9XG5cblx0aWYgKHBhcnNlZC5oZWxwKSB7XG5cdFx0cHJpbnRIZWxwKCk7XG5cdFx0cHJvY2Vzcy5leGl0KDApO1xuXHR9XG5cblx0aWYgKHBhcnNlZC5saXN0TW9kZWxzICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzZWFyY2hQYXR0ZXJuID0gdHlwZW9mIHBhcnNlZC5saXN0TW9kZWxzID09PSBcInN0cmluZ1wiID8gcGFyc2VkLmxpc3RNb2RlbHMgOiB1bmRlZmluZWQ7XG5cdFx0YXdhaXQgbGlzdE1vZGVscyhtb2RlbFJlZ2lzdHJ5LCBzZWFyY2hQYXR0ZXJuKTtcblx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdH1cblxuXHQvLyBSZWFkIHBpcGVkIHN0ZGluIGNvbnRlbnQgKGlmIGFueSkgLSBza2lwIGZvciBSUEMgbW9kZSB3aGljaCB1c2VzIHN0ZGluIGZvciBKU09OLVJQQ1xuXHRpZiAocGFyc2VkLm1vZGUgIT09IFwicnBjXCIpIHtcblx0XHRjb25zdCBzdGRpbkNvbnRlbnQgPSBhd2FpdCByZWFkUGlwZWRTdGRpbigpO1xuXHRcdGlmIChzdGRpbkNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gRm9yY2UgcHJpbnQgbW9kZSBzaW5jZSBpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIGEgVFRZIGZvciBrZXlib2FyZCBpbnB1dFxuXHRcdFx0cGFyc2VkLnByaW50ID0gdHJ1ZTtcblx0XHRcdC8vIFByZXBlbmQgc3RkaW4gY29udGVudCB0byBtZXNzYWdlc1xuXHRcdFx0cGFyc2VkLm1lc3NhZ2VzLnVuc2hpZnQoc3RkaW5Db250ZW50KTtcblx0XHR9XG5cdH1cblxuXHRpZiAocGFyc2VkLmV4cG9ydCkge1xuXHRcdGxldCByZXN1bHQ6IHN0cmluZztcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb3V0cHV0UGF0aCA9IHBhcnNlZC5tZXNzYWdlcy5sZW5ndGggPiAwID8gcGFyc2VkLm1lc3NhZ2VzWzBdIDogdW5kZWZpbmVkO1xuXHRcdFx0cmVzdWx0ID0gYXdhaXQgZXhwb3J0RnJvbUZpbGUocGFyc2VkLmV4cG9ydCwgb3V0cHV0UGF0aCk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiRmFpbGVkIHRvIGV4cG9ydCBzZXNzaW9uXCI7XG5cdFx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgRXJyb3I6ICR7bWVzc2FnZX1gKSk7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdGNvbnNvbGUubG9nKGBFeHBvcnRlZCB0bzogJHtyZXN1bHR9YCk7XG5cdFx0cHJvY2Vzcy5leGl0KDApO1xuXHR9XG5cblx0aWYgKHBhcnNlZC5tb2RlID09PSBcInJwY1wiICYmIHBhcnNlZC5maWxlQXJncy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJFcnJvcjogQGZpbGUgYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIFJQQyBtb2RlXCIpKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCB7IGluaXRpYWxNZXNzYWdlLCBpbml0aWFsSW1hZ2VzIH0gPSBhd2FpdCBwcmVwYXJlSW5pdGlhbE1lc3NhZ2UocGFyc2VkLCBzZXR0aW5nc01hbmFnZXIuZ2V0SW1hZ2VBdXRvUmVzaXplKCkpO1xuXHRjb25zdCBpc0ludGVyYWN0aXZlID0gIXBhcnNlZC5wcmludCAmJiBwYXJzZWQubW9kZSA9PT0gdW5kZWZpbmVkO1xuXHRjb25zdCBtb2RlID0gcGFyc2VkLm1vZGUgfHwgXCJ0ZXh0XCI7XG5cdGluaXRUaGVtZShzZXR0aW5nc01hbmFnZXIuZ2V0VGhlbWUoKSwgaXNJbnRlcmFjdGl2ZSk7XG5cblx0Ly8gU2hvdyBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiBpbnRlcmFjdGl2ZSBtb2RlXG5cdGlmIChpc0ludGVyYWN0aXZlICYmIGRlcHJlY2F0aW9uV2FybmluZ3MubGVuZ3RoID4gMCkge1xuXHRcdGF3YWl0IHNob3dEZXByZWNhdGlvbldhcm5pbmdzKGRlcHJlY2F0aW9uV2FybmluZ3MpO1xuXHR9XG5cblx0bGV0IHNjb3BlZE1vZGVsczogU2NvcGVkTW9kZWxbXSA9IFtdO1xuXHRjb25zdCBtb2RlbFBhdHRlcm5zID0gcGFyc2VkLm1vZGVscyA/PyBzZXR0aW5nc01hbmFnZXIuZ2V0RW5hYmxlZE1vZGVscygpO1xuXHRpZiAobW9kZWxQYXR0ZXJucyAmJiBtb2RlbFBhdHRlcm5zLmxlbmd0aCA+IDApIHtcblx0XHRzY29wZWRNb2RlbHMgPSBhd2FpdCByZXNvbHZlTW9kZWxTY29wZShtb2RlbFBhdHRlcm5zLCBtb2RlbFJlZ2lzdHJ5KTtcblx0fVxuXG5cdC8vIENyZWF0ZSBzZXNzaW9uIG1hbmFnZXIgYmFzZWQgb24gQ0xJIGZsYWdzXG5cdGxldCBzZXNzaW9uTWFuYWdlciA9IGF3YWl0IGNyZWF0ZVNlc3Npb25NYW5hZ2VyKHBhcnNlZCwgY3dkKTtcblxuXHQvLyBIYW5kbGUgLS1yZXN1bWU6IHNob3cgc2Vzc2lvbiBwaWNrZXJcblx0aWYgKHBhcnNlZC5yZXN1bWUpIHtcblx0XHQvLyBJbml0aWFsaXplIGtleWJpbmRpbmdzIHNvIHNlc3Npb24gcGlja2VyIHJlc3BlY3RzIHVzZXIgY29uZmlnXG5cdFx0S2V5YmluZGluZ3NNYW5hZ2VyLmNyZWF0ZSgpO1xuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRQYXRoID0gYXdhaXQgc2VsZWN0U2Vzc2lvbihcblx0XHRcdChvblByb2dyZXNzKSA9PiBTZXNzaW9uTWFuYWdlci5saXN0KGN3ZCwgcGFyc2VkLnNlc3Npb25EaXIsIG9uUHJvZ3Jlc3MpLFxuXHRcdFx0U2Vzc2lvbk1hbmFnZXIubGlzdEFsbCxcblx0XHQpO1xuXHRcdGlmICghc2VsZWN0ZWRQYXRoKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJObyBzZXNzaW9uIHNlbGVjdGVkXCIpKTtcblx0XHRcdHN0b3BUaGVtZVdhdGNoZXIoKTtcblx0XHRcdHByb2Nlc3MuZXhpdCgwKTtcblx0XHR9XG5cdFx0c2Vzc2lvbk1hbmFnZXIgPSBTZXNzaW9uTWFuYWdlci5vcGVuKHNlbGVjdGVkUGF0aCk7XG5cdH1cblxuXHRjb25zdCB7IG9wdGlvbnM6IHNlc3Npb25PcHRpb25zLCBjbGlUaGlua2luZ0Zyb21Nb2RlbCB9ID0gYnVpbGRTZXNzaW9uT3B0aW9ucyhcblx0XHRwYXJzZWQsXG5cdFx0c2NvcGVkTW9kZWxzLFxuXHRcdHNlc3Npb25NYW5hZ2VyLFxuXHRcdG1vZGVsUmVnaXN0cnksXG5cdFx0c2V0dGluZ3NNYW5hZ2VyLFxuXHQpO1xuXHRzZXNzaW9uT3B0aW9ucy5hdXRoU3RvcmFnZSA9IGF1dGhTdG9yYWdlO1xuXHRzZXNzaW9uT3B0aW9ucy5tb2RlbFJlZ2lzdHJ5ID0gbW9kZWxSZWdpc3RyeTtcblx0c2Vzc2lvbk9wdGlvbnMucmVzb3VyY2VMb2FkZXIgPSByZXNvdXJjZUxvYWRlcjtcblxuXHQvLyBIYW5kbGUgQ0xJIC0tYXBpLWtleSBhcyBydW50aW1lIG92ZXJyaWRlIChub3QgcGVyc2lzdGVkKVxuXHRpZiAocGFyc2VkLmFwaUtleSkge1xuXHRcdGlmICghc2Vzc2lvbk9wdGlvbnMubW9kZWwpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdGNoYWxrLnJlZChcIi0tYXBpLWtleSByZXF1aXJlcyBhIG1vZGVsIHRvIGJlIHNwZWNpZmllZCB2aWEgLS1tb2RlbCwgLS1wcm92aWRlci8tLW1vZGVsLCBvciAtLW1vZGVsc1wiKSxcblx0XHRcdCk7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdGF1dGhTdG9yYWdlLnNldFJ1bnRpbWVBcGlLZXkoc2Vzc2lvbk9wdGlvbnMubW9kZWwucHJvdmlkZXIsIHBhcnNlZC5hcGlLZXkpO1xuXHR9XG5cblx0Y29uc3QgeyBzZXNzaW9uLCBtb2RlbEZhbGxiYWNrTWVzc2FnZSB9ID0gYXdhaXQgY3JlYXRlQWdlbnRTZXNzaW9uKHNlc3Npb25PcHRpb25zKTtcblxuXHRpZiAoIWlzSW50ZXJhY3RpdmUgJiYgIXNlc3Npb24ubW9kZWwpIHtcblx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIk5vIG1vZGVscyBhdmFpbGFibGUuXCIpKTtcblx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnllbGxvdyhcIlxcblNldCBhbiBBUEkga2V5IGVudmlyb25tZW50IHZhcmlhYmxlOlwiKSk7XG5cdFx0Y29uc29sZS5lcnJvcihcIiAgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBHRU1JTklfQVBJX0tFWSwgZXRjLlwiKTtcblx0XHRjb25zb2xlLmVycm9yKGNoYWxrLnllbGxvdyhgXFxuT3IgY3JlYXRlICR7Z2V0TW9kZWxzUGF0aCgpfWApKTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHQvLyBDbGFtcCB0aGlua2luZyBsZXZlbCB0byBtb2RlbCBjYXBhYmlsaXRpZXMgZm9yIENMSS1wcm92aWRlZCB0aGlua2luZyBsZXZlbHMuXG5cdC8vIFRoaXMgY292ZXJzIGJvdGggLS10aGlua2luZyA8bGV2ZWw+IGFuZCAtLW1vZGVsIDxwYXR0ZXJuPjo8dGhpbmtpbmc+LlxuXHRjb25zdCBjbGlUaGlua2luZ092ZXJyaWRlID0gcGFyc2VkLnRoaW5raW5nICE9PSB1bmRlZmluZWQgfHwgY2xpVGhpbmtpbmdGcm9tTW9kZWw7XG5cdGlmIChzZXNzaW9uLm1vZGVsICYmIGNsaVRoaW5raW5nT3ZlcnJpZGUpIHtcblx0XHRsZXQgZWZmZWN0aXZlVGhpbmtpbmcgPSBzZXNzaW9uLnRoaW5raW5nTGV2ZWw7XG5cdFx0aWYgKCFzZXNzaW9uLm1vZGVsLnJlYXNvbmluZykge1xuXHRcdFx0ZWZmZWN0aXZlVGhpbmtpbmcgPSBcIm9mZlwiO1xuXHRcdH0gZWxzZSBpZiAoZWZmZWN0aXZlVGhpbmtpbmcgPT09IFwieGhpZ2hcIiAmJiAhc3VwcG9ydHNYaGlnaChzZXNzaW9uLm1vZGVsKSkge1xuXHRcdFx0ZWZmZWN0aXZlVGhpbmtpbmcgPSBcImhpZ2hcIjtcblx0XHR9XG5cdFx0aWYgKGVmZmVjdGl2ZVRoaW5raW5nICE9PSBzZXNzaW9uLnRoaW5raW5nTGV2ZWwpIHtcblx0XHRcdHNlc3Npb24uc2V0VGhpbmtpbmdMZXZlbChlZmZlY3RpdmVUaGlua2luZyk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1vZGUgPT09IFwicnBjXCIpIHtcblx0XHRhd2FpdCBydW5ScGNNb2RlKHNlc3Npb24pO1xuXHR9IGVsc2UgaWYgKGlzSW50ZXJhY3RpdmUpIHtcblx0XHRpZiAoc2NvcGVkTW9kZWxzLmxlbmd0aCA+IDAgJiYgKHBhcnNlZC52ZXJib3NlIHx8ICFzZXR0aW5nc01hbmFnZXIuZ2V0UXVpZXRTdGFydHVwKCkpKSB7XG5cdFx0XHRjb25zdCBtb2RlbExpc3QgPSBzY29wZWRNb2RlbHNcblx0XHRcdFx0Lm1hcCgoc20pID0+IHtcblx0XHRcdFx0XHRjb25zdCB0aGlua2luZ1N0ciA9IHNtLnRoaW5raW5nTGV2ZWwgPyBgOiR7c20udGhpbmtpbmdMZXZlbH1gIDogXCJcIjtcblx0XHRcdFx0XHRyZXR1cm4gYCR7c20ubW9kZWwuaWR9JHt0aGlua2luZ1N0cn1gO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuam9pbihcIiwgXCIpO1xuXHRcdFx0Y29uc29sZS5sb2coY2hhbGsuZGltKGBNb2RlbCBzY29wZTogJHttb2RlbExpc3R9ICR7Y2hhbGsuZ3JheShcIihDdHJsK1AgdG8gY3ljbGUpXCIpfWApKTtcblx0XHR9XG5cblx0XHRwcmludFRpbWluZ3MoKTtcblx0XHRjb25zdCBtb2RlID0gbmV3IEludGVyYWN0aXZlTW9kZShzZXNzaW9uLCB7XG5cdFx0XHRtaWdyYXRlZFByb3ZpZGVycyxcblx0XHRcdG1vZGVsRmFsbGJhY2tNZXNzYWdlLFxuXHRcdFx0aW5pdGlhbE1lc3NhZ2UsXG5cdFx0XHRpbml0aWFsSW1hZ2VzLFxuXHRcdFx0aW5pdGlhbE1lc3NhZ2VzOiBwYXJzZWQubWVzc2FnZXMsXG5cdFx0XHR2ZXJib3NlOiBwYXJzZWQudmVyYm9zZSxcblx0XHR9KTtcblx0XHRhd2FpdCBtb2RlLnJ1bigpO1xuXHR9IGVsc2Uge1xuXHRcdGF3YWl0IHJ1blByaW50TW9kZShzZXNzaW9uLCB7XG5cdFx0XHRtb2RlLFxuXHRcdFx0bWVzc2FnZXM6IHBhcnNlZC5tZXNzYWdlcyxcblx0XHRcdGluaXRpYWxNZXNzYWdlLFxuXHRcdFx0aW5pdGlhbEltYWdlcyxcblx0XHR9KTtcblx0XHRzdG9wVGhlbWVXYXRjaGVyKCk7XG5cdFx0aWYgKHByb2Nlc3Muc3Rkb3V0LndyaXRhYmxlTGVuZ3RoID4gMCkge1xuXHRcdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHByb2Nlc3Muc3Rkb3V0Lm9uY2UoXCJkcmFpblwiLCByZXNvbHZlKSk7XG5cdFx0fVxuXHRcdHByb2Nlc3MuZXhpdCgwKTtcblx0fVxufVxuXG5gYGBcbiJ9XSwiZGV0YWlscyI6eyJvd25lciI6ImJhZGxvZ2ljIiwicmVwbyI6InBpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9tYWluLnRzIiwicmVmIjpudWxsLCJjb250ZW50VHlwZSI6ImZpbGUiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI1OTQxMSwiZW5kZWRBdCI6MTc3MTM0NzI1OTk3NiwiZHVyYXRpb25NcyI6NTY1fX19fSwiZW5kZWRBdCI6MTc3MTM0NzI1OTk3NywiZHVyYXRpb25NcyI6NTY1fSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxU2NINVlmZkFjV0VnRThyS0RnUXBzOSIsInRvb2xOYW1lIjoiZ2l0aHViX3NlYXJjaCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJxdWVyeSI6InJlZ2lzdGVyUHJvdmlkZXIgcHJvdmlkZXIgbmFtZSJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjU5OTc3LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBDb2RlIFNlYXJjaCBSZXN1bHRzXG5cbioqUXVlcnk6KiogYHJlZ2lzdGVyUHJvdmlkZXIgcHJvdmlkZXIgbmFtZWBcbioqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4qKlRvdGFsIFJlc3VsdHM6KiogMTFcblxuIyMgUmVzdWx0c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2N1c3RvbS1wcm92aWRlci5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWdpdGxhYi1kdW8vaW5kZXgudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWdpdGxhYi1kdW8vaW5kZXgudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvbWFpbi50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL21haW4udHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2V4dGVuc2lvbnMubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvZXh0ZW5zaW9ucy5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL2xvYWRlci50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvZXh0ZW5zaW9ucy9sb2FkZXIudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9DSEFOR0VMT0cubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L0NIQU5HRUxPRy5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvcnVubmVyLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3J1bm5lci50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLXF3ZW4tY2xpL2luZGV4LnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1xd2VuLWNsaS9pbmRleC50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL21vZGVsLXJlZ2lzdHJ5LnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWFudGhyb3BpYy9pbmRleC50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXMvZXh0ZW5zaW9ucy9jdXN0b20tcHJvdmlkZXItYW50aHJvcGljL2luZGV4LnRzXG5cbiJ9XSwiZGV0YWlscyI6eyJxdWVyeSI6InJlZ2lzdGVyUHJvdmlkZXIgcHJvdmlkZXIgbmFtZSIsInJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDcyNTk5NzYsImVuZGVkQXQiOjE3NzEzNDcyNjA1MDYsImR1cmF0aW9uTXMiOjUzMH19fX0sImVuZGVkQXQiOjE3NzEzNDcyNjA1MDcsImR1cmF0aW9uTXMiOjUzMH0seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMVVWRWJubmVwOHI0TUhFZEhWd1J4cEgiLCJ0b29sTmFtZSI6ImdpdGh1Yl9zZWFyY2giLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicXVlcnkiOiJnZXRQcm92aWRlcnMgcmVnaXN0ZXJBcGlQcm92aWRlciJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjY0MDM2LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBDb2RlIFNlYXJjaCBSZXN1bHRzXG5cbioqUXVlcnk6KiogYGdldFByb3ZpZGVycyByZWdpc3RlckFwaVByb3ZpZGVyYFxuKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbioqVG90YWwgUmVzdWx0czoqKiAyXG5cbiMjIFJlc3VsdHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvbW9kZWwtcmVnaXN0cnkudHNcblxuIyMjIHBhY2thZ2VzL2FpL1JFQURNRS5tZFxuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9haS9SRUFETUUubWRcblxuIn1dLCJkZXRhaWxzIjp7InF1ZXJ5IjoiZ2V0UHJvdmlkZXJzIHJlZ2lzdGVyQXBpUHJvdmlkZXIiLCJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3MjY0MDM0LCJlbmRlZEF0IjoxNzcxMzQ3MjY0NTQ1LCJkdXJhdGlvbk1zIjo1MTF9fX19LCJlbmRlZEF0IjoxNzcxMzQ3MjY0NTQ2LCJkdXJhdGlvbk1zIjo1MTB9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFIaHlXUHFYcDh5dVk2cllUZ0pHb1VoIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzI2NDU0NywicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgYmFkbG9naWMvcGktbW9uby9wYWNrYWdlcy9haVxuXG4jIyBDb250ZW50c1xuXG4tIFtkXSBzY3JpcHRzXG4tIFtkXSBzcmNcbi0gW2RdIHRlc3Rcbi0gW2ZdIENIQU5HRUxPRy5tZCAoNDI2OTMgYnl0ZXMpXG4tIFtmXSBwYWNrYWdlLmpzb24gKDE1MjkgYnl0ZXMpXG4tIFtmXSBSRUFETUUubWQgKDQzODE1IGJ5dGVzKVxuLSBbZl0gdHNjb25maWcuYnVpbGQuanNvbiAoMjA4IGJ5dGVzKVxuLSBbZl0gdml0ZXN0LmNvbmZpZy50cyAoMTkwIGJ5dGVzKVxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haSIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJkaXJlY3RvcnkiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI2NDU0NSwiZW5kZWRBdCI6MTc3MTM0NzI2NDk1MiwiZHVyYXRpb25NcyI6NDA3fX19fSwiZW5kZWRBdCI6MTc3MTM0NzI2NDk1MiwiZHVyYXRpb25NcyI6NDA1fSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxVk5FNXlra0tYNWNVNXNwM25OQnc0aSIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjY4MTUyLCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBiYWRsb2dpYy9waS1tb25vL3BhY2thZ2VzL2FpL3NyY1xuXG4jIyBDb250ZW50c1xuXG4tIFtkXSBwcm92aWRlcnNcbi0gW2RdIHV0aWxzXG4tIFtmXSBhcGktcmVnaXN0cnkudHMgKDI1NjMgYnl0ZXMpXG4tIFtmXSBjbGkudHMgKDM4NjQgYnl0ZXMpXG4tIFtmXSBlbnYtYXBpLWtleXMudHMgKDQxMDQgYnl0ZXMpXG4tIFtmXSBpbmRleC50cyAoODc5IGJ5dGVzKVxuLSBbZl0gbW9kZWxzLmdlbmVyYXRlZC50cyAoMzEzNjUxIGJ5dGVzKVxuLSBbZl0gbW9kZWxzLnRzICgyODY1IGJ5dGVzKVxuLSBbZl0gc3RyZWFtLnRzICgxNTE4IGJ5dGVzKVxuLSBbZl0gdHlwZXMudHMgKDEwNTg4IGJ5dGVzKVxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haS9zcmMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZGlyZWN0b3J5IiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDcyNjgxNTEsImVuZGVkQXQiOjE3NzEzNDcyNjg1NzgsImR1cmF0aW9uTXMiOjQyN319fX0sImVuZGVkQXQiOjE3NzEzNDcyNjg1NzksImR1cmF0aW9uTXMiOjQyN30seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMTFnaVRFRDFOVzRVamN2RUFlQ2tTdHIiLCJ0b29sTmFtZSI6ImdpdGh1Yl9jb250ZW50IiwiYXJncyI6eyJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haS9zcmMvYXBpLXJlZ2lzdHJ5LnRzIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDcyNzE3ODEsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIGFwaS1yZWdpc3RyeS50c1xuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2FpL3NyYy9hcGktcmVnaXN0cnkudHNgXG4qKlNpemU6KiogMjU2MyBieXRlc1xuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgdHlwZSB7XG5cdEFwaSxcblx0QXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtLFxuXHRDb250ZXh0LFxuXHRNb2RlbCxcblx0U2ltcGxlU3RyZWFtT3B0aW9ucyxcblx0U3RyZWFtRnVuY3Rpb24sXG5cdFN0cmVhbU9wdGlvbnMsXG59IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEFwaVN0cmVhbUZ1bmN0aW9uID0gKFxuXHRtb2RlbDogTW9kZWw8QXBpPixcblx0Y29udGV4dDogQ29udGV4dCxcblx0b3B0aW9ucz86IFN0cmVhbU9wdGlvbnMsXG4pID0+IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbTtcblxuZXhwb3J0IHR5cGUgQXBpU3RyZWFtU2ltcGxlRnVuY3Rpb24gPSAoXG5cdG1vZGVsOiBNb2RlbDxBcGk+LFxuXHRjb250ZXh0OiBDb250ZXh0LFxuXHRvcHRpb25zPzogU2ltcGxlU3RyZWFtT3B0aW9ucyxcbikgPT4gQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVByb3ZpZGVyPFRBcGkgZXh0ZW5kcyBBcGkgPSBBcGksIFRPcHRpb25zIGV4dGVuZHMgU3RyZWFtT3B0aW9ucyA9IFN0cmVhbU9wdGlvbnM+IHtcblx0YXBpOiBUQXBpO1xuXHRzdHJlYW06IFN0cmVhbUZ1bmN0aW9uPFRBcGksIFRPcHRpb25zPjtcblx0c3RyZWFtU2ltcGxlOiBTdHJlYW1GdW5jdGlvbjxUQXBpLCBTaW1wbGVTdHJlYW1PcHRpb25zPjtcbn1cblxuaW50ZXJmYWNlIEFwaVByb3ZpZGVySW50ZXJuYWwge1xuXHRhcGk6IEFwaTtcblx0c3RyZWFtOiBBcGlTdHJlYW1GdW5jdGlvbjtcblx0c3RyZWFtU2ltcGxlOiBBcGlTdHJlYW1TaW1wbGVGdW5jdGlvbjtcbn1cblxudHlwZSBSZWdpc3RlcmVkQXBpUHJvdmlkZXIgPSB7XG5cdHByb3ZpZGVyOiBBcGlQcm92aWRlckludGVybmFsO1xuXHRzb3VyY2VJZD86IHN0cmluZztcbn07XG5cbmNvbnN0IGFwaVByb3ZpZGVyUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgUmVnaXN0ZXJlZEFwaVByb3ZpZGVyPigpO1xuXG5mdW5jdGlvbiB3cmFwU3RyZWFtPFRBcGkgZXh0ZW5kcyBBcGksIFRPcHRpb25zIGV4dGVuZHMgU3RyZWFtT3B0aW9ucz4oXG5cdGFwaTogVEFwaSxcblx0c3RyZWFtOiBTdHJlYW1GdW5jdGlvbjxUQXBpLCBUT3B0aW9ucz4sXG4pOiBBcGlTdHJlYW1GdW5jdGlvbiB7XG5cdHJldHVybiAobW9kZWwsIGNvbnRleHQsIG9wdGlvbnMpID0+IHtcblx0XHRpZiAobW9kZWwuYXBpICE9PSBhcGkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzbWF0Y2hlZCBhcGk6ICR7bW9kZWwuYXBpfSBleHBlY3RlZCAke2FwaX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0cmVhbShtb2RlbCBhcyBNb2RlbDxUQXBpPiwgY29udGV4dCwgb3B0aW9ucyBhcyBUT3B0aW9ucyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIHdyYXBTdHJlYW1TaW1wbGU8VEFwaSBleHRlbmRzIEFwaT4oXG5cdGFwaTogVEFwaSxcblx0c3RyZWFtU2ltcGxlOiBTdHJlYW1GdW5jdGlvbjxUQXBpLCBTaW1wbGVTdHJlYW1PcHRpb25zPixcbik6IEFwaVN0cmVhbVNpbXBsZUZ1bmN0aW9uIHtcblx0cmV0dXJuIChtb2RlbCwgY29udGV4dCwgb3B0aW9ucykgPT4ge1xuXHRcdGlmIChtb2RlbC5hcGkgIT09IGFwaSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBNaXNtYXRjaGVkIGFwaTogJHttb2RlbC5hcGl9IGV4cGVjdGVkICR7YXBpfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyZWFtU2ltcGxlKG1vZGVsIGFzIE1vZGVsPFRBcGk+LCBjb250ZXh0LCBvcHRpb25zKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXBpUHJvdmlkZXI8VEFwaSBleHRlbmRzIEFwaSwgVE9wdGlvbnMgZXh0ZW5kcyBTdHJlYW1PcHRpb25zPihcblx0cHJvdmlkZXI6IEFwaVByb3ZpZGVyPFRBcGksIFRPcHRpb25zPixcblx0c291cmNlSWQ/OiBzdHJpbmcsXG4pOiB2b2lkIHtcblx0YXBpUHJvdmlkZXJSZWdpc3RyeS5zZXQocHJvdmlkZXIuYXBpLCB7XG5cdFx0cHJvdmlkZXI6IHtcblx0XHRcdGFwaTogcHJvdmlkZXIuYXBpLFxuXHRcdFx0c3RyZWFtOiB3cmFwU3RyZWFtKHByb3ZpZGVyLmFwaSwgcHJvdmlkZXIuc3RyZWFtKSxcblx0XHRcdHN0cmVhbVNpbXBsZTogd3JhcFN0cmVhbVNpbXBsZShwcm92aWRlci5hcGksIHByb3ZpZGVyLnN0cmVhbVNpbXBsZSksXG5cdFx0fSxcblx0XHRzb3VyY2VJZCxcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcGlQcm92aWRlcihhcGk6IEFwaSk6IEFwaVByb3ZpZGVySW50ZXJuYWwgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gYXBpUHJvdmlkZXJSZWdpc3RyeS5nZXQoYXBpKT8ucHJvdmlkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcGlQcm92aWRlcnMoKTogQXBpUHJvdmlkZXJJbnRlcm5hbFtdIHtcblx0cmV0dXJuIEFycmF5LmZyb20oYXBpUHJvdmlkZXJSZWdpc3RyeS52YWx1ZXMoKSwgKGVudHJ5KSA9PiBlbnRyeS5wcm92aWRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyQXBpUHJvdmlkZXJzKHNvdXJjZUlkOiBzdHJpbmcpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBbYXBpLCBlbnRyeV0gb2YgYXBpUHJvdmlkZXJSZWdpc3RyeS5lbnRyaWVzKCkpIHtcblx0XHRpZiAoZW50cnkuc291cmNlSWQgPT09IHNvdXJjZUlkKSB7XG5cdFx0XHRhcGlQcm92aWRlclJlZ2lzdHJ5LmRlbGV0ZShhcGkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJBcGlQcm92aWRlcnMoKTogdm9pZCB7XG5cdGFwaVByb3ZpZGVyUmVnaXN0cnkuY2xlYXIoKTtcbn1cblxuYGBgXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9hcGktcmVnaXN0cnkudHMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3MjcxNzgwLCJlbmRlZEF0IjoxNzcxMzQ3MjcxOTUwLCJkdXJhdGlvbk1zIjoxNzB9fX19LCJlbmRlZEF0IjoxNzcxMzQ3MjcxOTUyLCJkdXJhdGlvbk1zIjoxNzF9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDExOEFmbzkxbUZRYkVWcnBiR0JaSDlLIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjL21vZGVscy50cyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjcxOTUzLCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBtb2RlbHMudHNcblxuKipQYXRoOioqIGBwYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzYFxuKipTaXplOioqIDI4NjUgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgTU9ERUxTIH0gZnJvbSBcIi4vbW9kZWxzLmdlbmVyYXRlZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGksIEtub3duUHJvdmlkZXIsIE1vZGVsLCBVc2FnZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmNvbnN0IG1vZGVsUmVnaXN0cnk6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE1vZGVsPEFwaT4+PiA9IG5ldyBNYXAoKTtcblxuLy8gSW5pdGlhbGl6ZSByZWdpc3RyeSBmcm9tIE1PREVMUyBvbiBtb2R1bGUgbG9hZFxuZm9yIChjb25zdCBbcHJvdmlkZXIsIG1vZGVsc10gb2YgT2JqZWN0LmVudHJpZXMoTU9ERUxTKSkge1xuXHRjb25zdCBwcm92aWRlck1vZGVscyA9IG5ldyBNYXA8c3RyaW5nLCBNb2RlbDxBcGk+PigpO1xuXHRmb3IgKGNvbnN0IFtpZCwgbW9kZWxdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVscykpIHtcblx0XHRwcm92aWRlck1vZGVscy5zZXQoaWQsIG1vZGVsIGFzIE1vZGVsPEFwaT4pO1xuXHR9XG5cdG1vZGVsUmVnaXN0cnkuc2V0KHByb3ZpZGVyLCBwcm92aWRlck1vZGVscyk7XG59XG5cbnR5cGUgTW9kZWxBcGk8XG5cdFRQcm92aWRlciBleHRlbmRzIEtub3duUHJvdmlkZXIsXG5cdFRNb2RlbElkIGV4dGVuZHMga2V5b2YgKHR5cGVvZiBNT0RFTFMpW1RQcm92aWRlcl0sXG4+ID0gKHR5cGVvZiBNT0RFTFMpW1RQcm92aWRlcl1bVE1vZGVsSWRdIGV4dGVuZHMgeyBhcGk6IGluZmVyIFRBcGkgfSA/IChUQXBpIGV4dGVuZHMgQXBpID8gVEFwaSA6IG5ldmVyKSA6IG5ldmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWw8VFByb3ZpZGVyIGV4dGVuZHMgS25vd25Qcm92aWRlciwgVE1vZGVsSWQgZXh0ZW5kcyBrZXlvZiAodHlwZW9mIE1PREVMUylbVFByb3ZpZGVyXT4oXG5cdHByb3ZpZGVyOiBUUHJvdmlkZXIsXG5cdG1vZGVsSWQ6IFRNb2RlbElkLFxuKTogTW9kZWw8TW9kZWxBcGk8VFByb3ZpZGVyLCBUTW9kZWxJZD4+IHtcblx0Y29uc3QgcHJvdmlkZXJNb2RlbHMgPSBtb2RlbFJlZ2lzdHJ5LmdldChwcm92aWRlcik7XG5cdHJldHVybiBwcm92aWRlck1vZGVscz8uZ2V0KG1vZGVsSWQgYXMgc3RyaW5nKSBhcyBNb2RlbDxNb2RlbEFwaTxUUHJvdmlkZXIsIFRNb2RlbElkPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlcnMoKTogS25vd25Qcm92aWRlcltdIHtcblx0cmV0dXJuIEFycmF5LmZyb20obW9kZWxSZWdpc3RyeS5rZXlzKCkpIGFzIEtub3duUHJvdmlkZXJbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsczxUUHJvdmlkZXIgZXh0ZW5kcyBLbm93blByb3ZpZGVyPihcblx0cHJvdmlkZXI6IFRQcm92aWRlcixcbik6IE1vZGVsPE1vZGVsQXBpPFRQcm92aWRlciwga2V5b2YgKHR5cGVvZiBNT0RFTFMpW1RQcm92aWRlcl0+PltdIHtcblx0Y29uc3QgbW9kZWxzID0gbW9kZWxSZWdpc3RyeS5nZXQocHJvdmlkZXIpO1xuXHRyZXR1cm4gbW9kZWxzID8gKEFycmF5LmZyb20obW9kZWxzLnZhbHVlcygpKSBhcyBNb2RlbDxNb2RlbEFwaTxUUHJvdmlkZXIsIGtleW9mICh0eXBlb2YgTU9ERUxTKVtUUHJvdmlkZXJdPj5bXSkgOiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvc3Q8VEFwaSBleHRlbmRzIEFwaT4obW9kZWw6IE1vZGVsPFRBcGk+LCB1c2FnZTogVXNhZ2UpOiBVc2FnZVtcImNvc3RcIl0ge1xuXHR1c2FnZS5jb3N0LmlucHV0ID0gKG1vZGVsLmNvc3QuaW5wdXQgLyAxMDAwMDAwKSAqIHVzYWdlLmlucHV0O1xuXHR1c2FnZS5jb3N0Lm91dHB1dCA9IChtb2RlbC5jb3N0Lm91dHB1dCAvIDEwMDAwMDApICogdXNhZ2Uub3V0cHV0O1xuXHR1c2FnZS5jb3N0LmNhY2hlUmVhZCA9IChtb2RlbC5jb3N0LmNhY2hlUmVhZCAvIDEwMDAwMDApICogdXNhZ2UuY2FjaGVSZWFkO1xuXHR1c2FnZS5jb3N0LmNhY2hlV3JpdGUgPSAobW9kZWwuY29zdC5jYWNoZVdyaXRlIC8gMTAwMDAwMCkgKiB1c2FnZS5jYWNoZVdyaXRlO1xuXHR1c2FnZS5jb3N0LnRvdGFsID0gdXNhZ2UuY29zdC5pbnB1dCArIHVzYWdlLmNvc3Qub3V0cHV0ICsgdXNhZ2UuY29zdC5jYWNoZVJlYWQgKyB1c2FnZS5jb3N0LmNhY2hlV3JpdGU7XG5cdHJldHVybiB1c2FnZS5jb3N0O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgbW9kZWwgc3VwcG9ydHMgeGhpZ2ggdGhpbmtpbmcgbGV2ZWwuXG4gKlxuICogU3VwcG9ydGVkIHRvZGF5OlxuICogLSBHUFQtNS4yIC8gR1BULTUuMyBtb2RlbCBmYW1pbGllc1xuICogLSBBbnRocm9waWMgTWVzc2FnZXMgQVBJIE9wdXMgNC42IG1vZGVscyAoeGhpZ2ggbWFwcyB0byBhZGFwdGl2ZSBlZmZvcnQgXCJtYXhcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzWGhpZ2g8VEFwaSBleHRlbmRzIEFwaT4obW9kZWw6IE1vZGVsPFRBcGk+KTogYm9vbGVhbiB7XG5cdGlmIChtb2RlbC5pZC5pbmNsdWRlcyhcImdwdC01LjJcIikgfHwgbW9kZWwuaWQuaW5jbHVkZXMoXCJncHQtNS4zXCIpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAobW9kZWwuYXBpID09PSBcImFudGhyb3BpYy1tZXNzYWdlc1wiKSB7XG5cdFx0cmV0dXJuIG1vZGVsLmlkLmluY2x1ZGVzKFwib3B1cy00LTZcIikgfHwgbW9kZWwuaWQuaW5jbHVkZXMoXCJvcHVzLTQuNlwiKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gbW9kZWxzIGFyZSBlcXVhbCBieSBjb21wYXJpbmcgYm90aCB0aGVpciBpZCBhbmQgcHJvdmlkZXIuXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGVpdGhlciBtb2RlbCBpcyBudWxsIG9yIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsc0FyZUVxdWFsPFRBcGkgZXh0ZW5kcyBBcGk+KFxuXHRhOiBNb2RlbDxUQXBpPiB8IG51bGwgfCB1bmRlZmluZWQsXG5cdGI6IE1vZGVsPFRBcGk+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuXHRpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIGEuaWQgPT09IGIuaWQgJiYgYS5wcm92aWRlciA9PT0gYi5wcm92aWRlcjtcbn1cblxuYGBgXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9tb2RlbHMudHMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3MjcxOTUxLCJlbmRlZEF0IjoxNzcxMzQ3MjcyMTE2LCJkdXJhdGlvbk1zIjoxNjV9fX19LCJlbmRlZEF0IjoxNzcxMzQ3MjcyMTE3LCJkdXJhdGlvbk1zIjoxNjR9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFZRFZkeVBxU0htODJUY1dKbjU5YkhaIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjcyMTE4LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBiYWRsb2dpYy9waS1tb25vL3BhY2thZ2VzL2FpL3NyYy9wcm92aWRlcnNcblxuIyMgQ29udGVudHNcblxuLSBbZl0gYW1hem9uLWJlZHJvY2sudHMgKDIzMTE5IGJ5dGVzKVxuLSBbZl0gYW50aHJvcGljLnRzICgyNTc0OCBieXRlcylcbi0gW2ZdIGF6dXJlLW9wZW5haS1yZXNwb25zZXMudHMgKDc4NjMgYnl0ZXMpXG4tIFtmXSBnaXRodWItY29waWxvdC1oZWFkZXJzLnRzICgxMTg0IGJ5dGVzKVxuLSBbZl0gZ29vZ2xlLWdlbWluaS1jbGkudHMgKDI4ODk3IGJ5dGVzKVxuLSBbZl0gZ29vZ2xlLXNoYXJlZC50cyAoMTE2ODUgYnl0ZXMpXG4tIFtmXSBnb29nbGUtdmVydGV4LnRzICgxMzU2NyBieXRlcylcbi0gW2ZdIGdvb2dsZS50cyAoMTI5MTEgYnl0ZXMpXG4tIFtmXSBvcGVuYWktY29kZXgtcmVzcG9uc2VzLnRzICgyNjg4NiBieXRlcylcbi0gW2ZdIG9wZW5haS1jb21wbGV0aW9ucy50cyAoMjgwMTUgYnl0ZXMpXG4tIFtmXSBvcGVuYWktcmVzcG9uc2VzLXNoYXJlZC50cyAoMTY3NTQgYnl0ZXMpXG4tIFtmXSBvcGVuYWktcmVzcG9uc2VzLnRzICg3NzM5IGJ5dGVzKVxuLSBbZl0gcmVnaXN0ZXItYnVpbHRpbnMudHMgKDIyNjIgYnl0ZXMpXG4tIFtmXSBzaW1wbGUtb3B0aW9ucy50cyAoMTUxMSBieXRlcylcbi0gW2ZdIHRyYW5zZm9ybS1tZXNzYWdlcy50cyAoNTQ2MyBieXRlcylcbiJ9XSwiZGV0YWlscyI6eyJvd25lciI6ImJhZGxvZ2ljIiwicmVwbyI6InBpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycyIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJkaXJlY3RvcnkiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI3MjExNiwiZW5kZWRBdCI6MTc3MTM0NzI3MjY0OSwiZHVyYXRpb25NcyI6NTMzfX19fSwiZW5kZWRBdCI6MTc3MTM0NzI3MjY1MCwiZHVyYXRpb25NcyI6NTMyfSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxTUZleVJxQVVFR1p0V01MZkdia3NhVCIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9wcm92aWRlcnMvcmVnaXN0ZXItYnVpbHRpbnMudHMifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzI3NTc4MCwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgcmVnaXN0ZXItYnVpbHRpbnMudHNcblxuKipQYXRoOioqIGBwYWNrYWdlcy9haS9zcmMvcHJvdmlkZXJzL3JlZ2lzdGVyLWJ1aWx0aW5zLnRzYFxuKipTaXplOioqIDIyNjIgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgY2xlYXJBcGlQcm92aWRlcnMsIHJlZ2lzdGVyQXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vYXBpLXJlZ2lzdHJ5LmpzXCI7XG5pbXBvcnQgeyBzdHJlYW1CZWRyb2NrLCBzdHJlYW1TaW1wbGVCZWRyb2NrIH0gZnJvbSBcIi4vYW1hem9uLWJlZHJvY2suanNcIjtcbmltcG9ydCB7IHN0cmVhbUFudGhyb3BpYywgc3RyZWFtU2ltcGxlQW50aHJvcGljIH0gZnJvbSBcIi4vYW50aHJvcGljLmpzXCI7XG5pbXBvcnQgeyBzdHJlYW1BenVyZU9wZW5BSVJlc3BvbnNlcywgc3RyZWFtU2ltcGxlQXp1cmVPcGVuQUlSZXNwb25zZXMgfSBmcm9tIFwiLi9henVyZS1vcGVuYWktcmVzcG9uc2VzLmpzXCI7XG5pbXBvcnQgeyBzdHJlYW1Hb29nbGUsIHN0cmVhbVNpbXBsZUdvb2dsZSB9IGZyb20gXCIuL2dvb2dsZS5qc1wiO1xuaW1wb3J0IHsgc3RyZWFtR29vZ2xlR2VtaW5pQ2xpLCBzdHJlYW1TaW1wbGVHb29nbGVHZW1pbmlDbGkgfSBmcm9tIFwiLi9nb29nbGUtZ2VtaW5pLWNsaS5qc1wiO1xuaW1wb3J0IHsgc3RyZWFtR29vZ2xlVmVydGV4LCBzdHJlYW1TaW1wbGVHb29nbGVWZXJ0ZXggfSBmcm9tIFwiLi9nb29nbGUtdmVydGV4LmpzXCI7XG5pbXBvcnQgeyBzdHJlYW1PcGVuQUlDb2RleFJlc3BvbnNlcywgc3RyZWFtU2ltcGxlT3BlbkFJQ29kZXhSZXNwb25zZXMgfSBmcm9tIFwiLi9vcGVuYWktY29kZXgtcmVzcG9uc2VzLmpzXCI7XG5pbXBvcnQgeyBzdHJlYW1PcGVuQUlDb21wbGV0aW9ucywgc3RyZWFtU2ltcGxlT3BlbkFJQ29tcGxldGlvbnMgfSBmcm9tIFwiLi9vcGVuYWktY29tcGxldGlvbnMuanNcIjtcbmltcG9ydCB7IHN0cmVhbU9wZW5BSVJlc3BvbnNlcywgc3RyZWFtU2ltcGxlT3BlbkFJUmVzcG9uc2VzIH0gZnJvbSBcIi4vb3BlbmFpLXJlc3BvbnNlcy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJCdWlsdEluQXBpUHJvdmlkZXJzKCk6IHZvaWQge1xuXHRyZWdpc3RlckFwaVByb3ZpZGVyKHtcblx0XHRhcGk6IFwiYW50aHJvcGljLW1lc3NhZ2VzXCIsXG5cdFx0c3RyZWFtOiBzdHJlYW1BbnRocm9waWMsXG5cdFx0c3RyZWFtU2ltcGxlOiBzdHJlYW1TaW1wbGVBbnRocm9waWMsXG5cdH0pO1xuXG5cdHJlZ2lzdGVyQXBpUHJvdmlkZXIoe1xuXHRcdGFwaTogXCJvcGVuYWktY29tcGxldGlvbnNcIixcblx0XHRzdHJlYW06IHN0cmVhbU9wZW5BSUNvbXBsZXRpb25zLFxuXHRcdHN0cmVhbVNpbXBsZTogc3RyZWFtU2ltcGxlT3BlbkFJQ29tcGxldGlvbnMsXG5cdH0pO1xuXG5cdHJlZ2lzdGVyQXBpUHJvdmlkZXIoe1xuXHRcdGFwaTogXCJvcGVuYWktcmVzcG9uc2VzXCIsXG5cdFx0c3RyZWFtOiBzdHJlYW1PcGVuQUlSZXNwb25zZXMsXG5cdFx0c3RyZWFtU2ltcGxlOiBzdHJlYW1TaW1wbGVPcGVuQUlSZXNwb25zZXMsXG5cdH0pO1xuXG5cdHJlZ2lzdGVyQXBpUHJvdmlkZXIoe1xuXHRcdGFwaTogXCJhenVyZS1vcGVuYWktcmVzcG9uc2VzXCIsXG5cdFx0c3RyZWFtOiBzdHJlYW1BenVyZU9wZW5BSVJlc3BvbnNlcyxcblx0XHRzdHJlYW1TaW1wbGU6IHN0cmVhbVNpbXBsZUF6dXJlT3BlbkFJUmVzcG9uc2VzLFxuXHR9KTtcblxuXHRyZWdpc3RlckFwaVByb3ZpZGVyKHtcblx0XHRhcGk6IFwib3BlbmFpLWNvZGV4LXJlc3BvbnNlc1wiLFxuXHRcdHN0cmVhbTogc3RyZWFtT3BlbkFJQ29kZXhSZXNwb25zZXMsXG5cdFx0c3RyZWFtU2ltcGxlOiBzdHJlYW1TaW1wbGVPcGVuQUlDb2RleFJlc3BvbnNlcyxcblx0fSk7XG5cblx0cmVnaXN0ZXJBcGlQcm92aWRlcih7XG5cdFx0YXBpOiBcImdvb2dsZS1nZW5lcmF0aXZlLWFpXCIsXG5cdFx0c3RyZWFtOiBzdHJlYW1Hb29nbGUsXG5cdFx0c3RyZWFtU2ltcGxlOiBzdHJlYW1TaW1wbGVHb29nbGUsXG5cdH0pO1xuXG5cdHJlZ2lzdGVyQXBpUHJvdmlkZXIoe1xuXHRcdGFwaTogXCJnb29nbGUtZ2VtaW5pLWNsaVwiLFxuXHRcdHN0cmVhbTogc3RyZWFtR29vZ2xlR2VtaW5pQ2xpLFxuXHRcdHN0cmVhbVNpbXBsZTogc3RyZWFtU2ltcGxlR29vZ2xlR2VtaW5pQ2xpLFxuXHR9KTtcblxuXHRyZWdpc3RlckFwaVByb3ZpZGVyKHtcblx0XHRhcGk6IFwiZ29vZ2xlLXZlcnRleFwiLFxuXHRcdHN0cmVhbTogc3RyZWFtR29vZ2xlVmVydGV4LFxuXHRcdHN0cmVhbVNpbXBsZTogc3RyZWFtU2ltcGxlR29vZ2xlVmVydGV4LFxuXHR9KTtcblxuXHRyZWdpc3RlckFwaVByb3ZpZGVyKHtcblx0XHRhcGk6IFwiYmVkcm9jay1jb252ZXJzZS1zdHJlYW1cIixcblx0XHRzdHJlYW06IHN0cmVhbUJlZHJvY2ssXG5cdFx0c3RyZWFtU2ltcGxlOiBzdHJlYW1TaW1wbGVCZWRyb2NrLFxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0QXBpUHJvdmlkZXJzKCk6IHZvaWQge1xuXHRjbGVhckFwaVByb3ZpZGVycygpO1xuXHRyZWdpc3RlckJ1aWx0SW5BcGlQcm92aWRlcnMoKTtcbn1cblxucmVnaXN0ZXJCdWlsdEluQXBpUHJvdmlkZXJzKCk7XG5cbmBgYFxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haS9zcmMvcHJvdmlkZXJzL3JlZ2lzdGVyLWJ1aWx0aW5zLnRzIiwicmVmIjpudWxsLCJjb250ZW50VHlwZSI6ImZpbGUiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI3NTc3OSwiZW5kZWRBdCI6MTc3MTM0NzI3NTkyOCwiZHVyYXRpb25NcyI6MTQ5fX19fSwiZW5kZWRBdCI6MTc3MTM0NzI3NTkzMSwiZHVyYXRpb25NcyI6MTUxfSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxOTFhazdwTjJXbXRBMldtTGJGQXdZdCIsInRvb2xOYW1lIjoibGlua3VwX3dlYl9zZWFyY2giLCJhcmdzIjp7InF1ZXJ5Ijoic2l0ZTpnaXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8gbW9kZWxzLmdlbmVyYXRlZC50cyBNT0RFTFMiLCJkZXB0aCI6ImZhc3QifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzI3NTkzMiwicGFydGlhbFJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTZWFyY2hpbmcgKGZhc3QgbW9kZSkuLi4ifV0sImRldGFpbHMiOnt9fSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkZvdW5kIDIwIHJlc3VsdChzKTpcblxuIyMgcGktbW9uby9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzXG5cbi8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBzY3JpcHRzL2dlbmVyYXRlLW1vZGVscy50c1xuLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvZ2VuZXJhdGUtbW9kZWxzLnRzXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L1JFQURNRS5tZFxuXG4jIEludGVyYWN0aXZlIHdpdGggaW5pdGlhbCBwcm9tcHQgcGkgJnF1b3Q7TGlzdCBhbGwgLnRzIGZpbGVzIGluIHNyYy8mcXVvdDsgIyBOb24taW50ZXJhY3RpdmUgcGkgLXAgJnF1b3Q7U3VtbWFyaXplIHRoaXMgY29kZWJhc2UmcXVvdDsgIyBEaWZmZXJlbnQgbW9kZWwgcGkgLS1wcm92aWRlciBvcGVuYWkgLS1tb2RlbCBncHQtNG8gJnF1b3Q7SGVscCBtZSByZWZhY3RvciZxdW90OyAjIE1vZGVsIHdpdGggcHJvdmlkZXIgcHJlZml4IChubyAtLXByb3ZpZGVyIG5lZWRlZCkgcGkgLS1tb2RlbCBvcGVuYWkvZ3B0LTRvICZxdW90O0hlbHAgbWUgcmVmYWN0b3ImcXVvdDsgIyBNb2RlbCB3aXRoIHRoaW5raW5nIGxldmVsIHNob3J0aGFuZCBwaSAtLW1vZGVsIHNvbm5ldDpoaWdoICZxdW90O1NvbHZlIHRoaXMgY29tcGxleCBwcm9ibGVtJnF1b3Q7ICMgTGltaXQgbW9kZWwgY3ljbGluZyBwaSAtLW1vZGVscyAmcXVvdDtjbGF1ZGUtKixncHQtNG8mcXVvdDsgIyBSZWFkLW9ubHkgbW9kZSBwaSAtLXRvb2xzIHJlYWQsZ3JlcCxmaW5kLGxzIC1wICZxdW90O1JldmlldyB0aGUgY29kZSZxdW90OyAjIEhpZ2ggdGhpbmtpbmcgbGV2ZWwgcGkgLS10aGlua2luZyBoaWdoICZxdW90O1NvbHZlIHRoaXMgY29tcGxleCBwcm9ibGVtJnF1b3Q7XG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuIyBJbnRlcmFjdGl2ZSB3aXRoIGluaXRpYWwgcHJvbXB0IHBpIFwiTGlzdCBhbGwgLnRzIGZpbGVzIGluIHNyYy9cIiAjIE5vbi1pbnRlcmFjdGl2ZSBwaSAtcCBcIlN1bW1hcml6ZSB0aGlzIGNvZGViYXNlXCIgIyBEaWZmZXJlbnQgbW9kZWwgcGkgLS1wcm92aWRlciBvcGVuYWkgLS1tb2RlbCBncHQtNG8gXCJIZWxwIG1lIHJlZmFjdG9yXCIgIyBNb2RlbCB3aXRoIHByb3ZpZGVyIHByZWZpeCAobm8gLS1wcm92aWRlciBuZWVkZWQpIHBpIC0tbW9kZWwgb3BlbmFpL2dwdC00byBcIkhlbHAgbWUgcmVmYWN0b3JcIiAjIE1vZGVsIHdpdGggdGhpbmtpbmcgbGV2ZWwgc2hvcnRoYW5kIHBpIC0tbW9kZWwgc29ubmV0OmhpZ2ggXCJTb2x2ZSB0aGlzIGNvbXBsZXggcHJvYmxlbVwiICMgTGltaXQgbW9kZWwgY3ljbGluZyBwaSAtLW1vZGVscyBcImNsYXVkZS0qLGdwdC00b1wiICMgUmVhZC1vbmx5IG1vZGUgcGkgLS10b29scyByZWFkLGdyZXAsZmluZCxscyAtcCBcIlJldmlldyB0aGUgY29kZVwiICMgSGlnaCB0aGlua2luZyBsZXZlbCBwaSAtLXRoaW5raW5nIGhpZ2ggXCJTb2x2ZSB0aGlzIGNvbXBsZXggcHJvYmxlbVwiXG5Db21iaW5lIC0tbm8tKiB3aXRoIGV4cGxpY2l0IGZsYWdzIHRvIGxvYWQgZXhhY3RseSB3aGF0IHlvdSBuZWVkLCBpZ25vcmluZyBzZXR0aW5ncy5qc29uIChlLmcuLCAtLW5vLWV4dGVuc2lvbnMgLWUgLi9teS1leHQudHMpLlxuVGhlbiBqdXN0IHRhbGsgdG8gcGkuIEJ5IGRlZmF1bHQsIHBpIGdpdmVzIHRoZSBtb2RlbCBmb3VyIHRvb2xzOiByZWFkLCB3cml0ZSwgZWRpdCwgYW5kIGJhc2guIFRoZSBtb2RlbCB1c2VzIHRoZXNlIHRvIGZ1bGZpbGwgeW91ciByZXF1ZXN0cy5cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzXG5cbm1vZGVsOiBNb2RlbCZsdDtUQXBpJmd0OywgXHRjb250ZXh0OiBDb250ZXh0LCBcdG9wdGlvbnM/OiBUT3B0aW9ucywgKSA9Jmd0OyBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW07ICDCtyBleHBvcnQgaW50ZXJmYWNlIFRleHRDb250ZW50IHsgXHR0eXBlOiAmcXVvdDt0ZXh0JnF1b3Q7OyBcdHRleHQ6IHN0cmluZzsgXHR0ZXh0U2lnbmF0dXJlPzogc3RyaW5nOyAvLyBlLmcuLCBmb3IgT3BlbkFJIHJlc3BvbnNlcywgdGhlIG1lc3NhZ2UgSUQgwrcgfSAgwrcgZXhwb3J0IGludGVyZmFjZSBUaGlua2luZ0NvbnRlbnQgeyBcdHR5cGU6ICZxdW90O3RoaW5raW5nJnF1b3Q7OyBcdHRoaW5raW5nOiBzdHJpbmc7IFx0dGhpbmtpbmdTaWduYXR1cmU/OiBzdHJpbmc7IC8vIGUuZy4sIGZvciBPcGVuQUkgcmVzcG9uc2VzLCB0aGUgcmVhc29uaW5nIGl0ZW0gSUQgwrdcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2FpL3NyYy90eXBlcy50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbi8vIE1vZGVsIGludGVyZmFjZSBmb3IgdGhlIHVuaWZpZWQgbW9kZWwgc3lzdGVtIMK3XG5tb2RlbDogTW9kZWw8VEFwaT4sIFx0Y29udGV4dDogQ29udGV4dCwgXHRvcHRpb25zPzogVE9wdGlvbnMsICkgPT4gQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtOyAgwrcgZXhwb3J0IGludGVyZmFjZSBUZXh0Q29udGVudCB7IFx0dHlwZTogXCJ0ZXh0XCI7IFx0dGV4dDogc3RyaW5nOyBcdHRleHRTaWduYXR1cmU/OiBzdHJpbmc7IC8vIGUuZy4sIGZvciBPcGVuQUkgcmVzcG9uc2VzLCB0aGUgbWVzc2FnZSBJRCDCtyB9ICDCtyBleHBvcnQgaW50ZXJmYWNlIFRoaW5raW5nQ29udGVudCB7IFx0dHlwZTogXCJ0aGlua2luZ1wiOyBcdHRoaW5raW5nOiBzdHJpbmc7IFx0dGhpbmtpbmdTaWduYXR1cmU/OiBzdHJpbmc7IC8vIGUuZy4sIGZvciBPcGVuQUkgcmVzcG9uc2VzLCB0aGUgcmVhc29uaW5nIGl0ZW0gSUQgwrdcblxuLS0tXG5cbiMjIEV4cG9zZSBzbGFzaCBjb21tYW5kcyBpbiBSUEMgbW9kZSDCtyBJc3N1ZSAjOTEgwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9pc3N1ZXMvOTFcblxuVGhlbiBib3RoIHR1aS1yZW5kZXJlci50cyBhbmQgdGhlIFJQQyBoYW5kbGVyIGNhbGwgdGhlc2UgZnVuY3Rpb25zLiAuLi4geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O3NldF90aGlua2luZyZxdW90OywgJnF1b3Q7YXJncyZxdW90OzogeyZxdW90O2xldmVsJnF1b3Q7OiAmcXVvdDtoaWdoJnF1b3Q7fX0geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O3NldF9tb2RlbCZxdW90OywgJnF1b3Q7YXJncyZxdW90OzogeyZxdW90O3Byb3ZpZGVyJnF1b3Q7OiAmcXVvdDthbnRocm9waWMmcXVvdDssICZxdW90O21vZGVsJnF1b3Q7OiAmcXVvdDtjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQmcXVvdDt9fSB7JnF1b3Q7dHlwZSZxdW90OzogJnF1b3Q7Y29tbWFuZCZxdW90OywgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7Z2V0X21vZGVscyZxdW90O30geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O2dldF9zdGF0ZSZxdW90O30geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O2NsZWFyJnF1b3Q7fSB7JnF1b3Q7dHlwZSZxdW90OzogJnF1b3Q7Y29tbWFuZCZxdW90OywgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7ZXhwb3J0JnF1b3Q7LCAmcXVvdDthcmdzJnF1b3Q7OiB7JnF1b3Q7cGF0aCZxdW90OzogJnF1b3Q7L3RtcC9zZXNzaW9uLmh0bWwmcXVvdDt9fSB7JnF1b3Q7dHlwZSZxdW90OzogJnF1b3Q7Y29tbWFuZCZxdW90OywgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7Z2V0X3Nlc3Npb24mcXVvdDt9XG5TdW1tYXJ5IFJQQyBtb2RlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHByb21wdCBhbmQgYWJvcnQgY29tbWFuZHMuIFdlIHNob3VsZCBleHBvc2UgYSBzdWJzZXQgb2YgaW50ZXJhY3RpdmUgbW9kZSBzbGFzaCBjb21tYW5kcyBpbiBSUEMgbW9kZSwgcGx1cyBwb3RlbnRpYWxseSBSUEMtc3BlY2lmaWMgY29tbWFuZHMuIEN1cnJlbnQgSW50ZXJhY3RpdmUgTW9kZSBDb21tYW5kcyBDb21tYW5kIERlc2NyaXB0aW9uIFIuLi5cblRoZW4gYm90aCB0dWktcmVuZGVyZXIudHMgYW5kIHRoZSBSUEMgaGFuZGxlciBjYWxsIHRoZXNlIGZ1bmN0aW9ucy4gLi4uIHtcInR5cGVcIjogXCJjb21tYW5kXCIsIFwibmFtZVwiOiBcInNldF90aGlua2luZ1wiLCBcImFyZ3NcIjoge1wibGV2ZWxcIjogXCJoaWdoXCJ9fSB7XCJ0eXBlXCI6IFwiY29tbWFuZFwiLCBcIm5hbWVcIjogXCJzZXRfbW9kZWxcIiwgXCJhcmdzXCI6IHtcInByb3ZpZGVyXCI6IFwiYW50aHJvcGljXCIsIFwibW9kZWxcIjogXCJjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRcIn19IHtcInR5cGVcIjogXCJjb21tYW5kXCIsIFwibmFtZVwiOiBcImdldF9tb2RlbHNcIn0ge1widHlwZVwiOiBcImNvbW1hbmRcIiwgXCJuYW1lXCI6IFwiZ2V0X3N0YXRlXCJ9IHtcInR5cGVcIjogXCJjb21tYW5kXCIsIFwibmFtZVwiOiBcImNsZWFyXCJ9IHtcInR5cGVcIjogXCJjb21tYW5kXCIsIFwibmFtZVwiOiBcImV4cG9ydFwiLCBcImFyZ3NcIjoge1wicGF0aFwiOiBcIi90bXAvc2Vzc2lvbi5odG1sXCJ9fSB7XCJ0eXBlXCI6IFwiY29tbWFuZFwiLCBcIm5hbWVcIjogXCJnZXRfc2Vzc2lvblwifVxue1widHlwZVwiOiBcImNvbW1hbmRfcmVzdWx0XCIsIFwibmFtZVwiOiBcImdldF9tb2RlbHNcIiwgXCJzdWNjZXNzXCI6IHRydWUsIFwiZGF0YVwiOiBbLi4uXX0ge1widHlwZVwiOiBcImNvbW1hbmRfcmVzdWx0XCIsIFwibmFtZVwiOiBcInNldF90aGlua2luZ1wiLCBcInN1Y2Nlc3NcIjogdHJ1ZX0ge1widHlwZVwiOiBcImNvbW1hbmRfcmVzdWx0XCIsIFwibmFtZVwiOiBcInNldF9tb2RlbFwiLCBcInN1Y2Nlc3NcIjogZmFsc2UsIFwiZXJyb3JcIjogXCJNb2RlbCBub3QgZm91bmRcIn0gRXh0cmFjdCBzaGFyZWQgY29tbWFuZCBsb2dpYyBmcm9tIHR1aS1yZW5kZXJlci50cyBpbnRvIHNlcGFyYXRlIG1vZHVsZXMgwrdcbnNyYy9jb21tYW5kcy90aGlua2luZy50cyAtIHNldFRoaW5raW5nTGV2ZWwoKSwgZ2V0QXZhaWxhYmxlVGhpbmtpbmdMZXZlbHMoKSBzcmMvY29tbWFuZHMvbW9kZWwudHMgLSBzZXRNb2RlbCgpLCBnZXRBdmFpbGFibGVNb2RlbHMoKSAoc29tZSBhbHJlYWR5IGV4aXN0cykgc3JjL2NvbW1hbmRzL3Nlc3Npb24udHMgLSBjbGVhclNlc3Npb24oKSwgZ2V0U2Vzc2lvbkluZm8oKSwgZXhwb3J0U2Vzc2lvbigpIFRoZW4gYm90aCB0dWktcmVuZGVyZXIudHMgYW5kIHRoZSBSUEMgaGFuZGxlciBjYWxsIHRoZXNlIGZ1bmN0aW9ucy5cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvbW9kZWxzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvbW9kZWxzLm1kXG5cbkFkZCBjdXN0b20gcHJvdmlkZXJzIGFuZCBtb2RlbHMgKE9sbGFtYSwgdkxMTSwgTE0gU3R1ZGlvLCBwcm94aWVzKSB2aWEgfi8ucGkvYWdlbnQvbW9kZWxzLmpzb24uXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9tb2RlbHMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5UaGUgZmlsZSByZWxvYWRzIGVhY2ggdGltZSB5b3Ugb3BlbiAvbW9kZWwuIEVkaXQgZHVyaW5nIHNlc3Npb247IG5vIHJlc3RhcnQgbmVlZGVkLiBBUEkgwrcgRGVzY3JpcHRpb24gwrcgb3BlbmFpLWNvbXBsZXRpb25zIMK3IE9wZW5BSSBDaGF0IENvbXBsZXRpb25zIChtb3N0IGNvbXBhdGlibGUpIG9wZW5haS1yZXNwb25zZXMgwrcgT3BlbkFJIFJlc3BvbnNlcyBBUEkgwrcgYW50aHJvcGljLW1lc3NhZ2VzIMK3IEFudGhyb3BpYyBNZXNzYWdlcyBBUEkgwrcgZ29vZ2xlLWdlbmVyYXRpdmUtYWkgwrdcbkdvb2dsZSBHZW5lcmF0aXZlIEFJIMK3IFNldCBhcGkgYXQgcHJvdmlkZXIgbGV2ZWwgKGRlZmF1bHQgZm9yIGFsbCBtb2RlbHMpIG9yIG1vZGVsIGxldmVsIChvdmVycmlkZSBwZXIgbW9kZWwpLiBGaWVsZCDCtyBEZXNjcmlwdGlvbiDCtyBiYXNlVXJsIMK3IEFQSSBlbmRwb2ludCBVUkwgwrcgYXBpIMK3IEFQSSB0eXBlIChzZWUgYWJvdmUpIGFwaUtleSDCtyBBUEkga2V5IChzZWUgdmFsdWUgcmVzb2x1dGlvbiBiZWxvdykgaGVhZGVycyDCtyBDdXN0b20gaGVhZGVycyAoc2VlIHZhbHVlIHJlc29sdXRpb24gYmVsb3cpIGF1dGhIZWFkZXIgwrdcbkFkZCBjdXN0b20gcHJvdmlkZXJzIGFuZCBtb2RlbHMgKE9sbGFtYSwgdkxMTSwgTE0gU3R1ZGlvLCBwcm94aWVzKSB2aWEgfi8ucGkvYWdlbnQvbW9kZWxzLmpzb24uXG5cbi0tLVxuXG4jIyBwaS1tb25vL0FHRU5UUy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL0FHRU5UUy5tZFxuXG5JZiB0aGUgcHJvdmlkZXIgZXhwb3NlcyBtdWx0aXBsZSBtb2RlbCBmYW1pbGllcyAoZm9yIGV4YW1wbGUgR1BUIGFuZCBDbGF1ZGUpLCBhZGQgYXQgbGVhc3Qgb25lIHBhaXIgcGVyIGZhbWlseS4gRm9yIG5vbi1zdGFuZGFyZCBhdXRoLCBjcmVhdGUgdXRpbGl0eSAoZS5nLiwgYmVkcm9jay11dGlscy50cykgd2l0aCBjcmVkZW50aWFsIGRldGVjdGlvbi5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBiYWRsb2dpYy9waS1tb25vXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9BR0VOVFMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5Gb3IgY3Jvc3MtcHJvdmlkZXItaGFuZG9mZi50ZXN0LnRzLCBhZGQgYXQgbGVhc3Qgb25lIHByb3ZpZGVyL21vZGVsIHBhaXIuXG5zcmMvY29yZS9tb2RlbC1yZXNvbHZlci50czogQWRkIGRlZmF1bHQgbW9kZWwgSUQgdG8gREVGQVVMVF9NT0RFTFNcblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycy9vcGVuYWktY29tcGxldGlvbnMudHMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvcHJvdmlkZXJzL29wZW5haS1jb21wbGV0aW9ucy50c1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhtb2RlbDogTW9kZWwmbHQ7JnF1b3Q7b3BlbmFpLWNvbXBsZXRpb25zJnF1b3Q7Jmd0OywgY29udGV4dDogQ29udGV4dCwgb3B0aW9ucz86IE9wZW5BSUNvbXBsZXRpb25zT3B0aW9ucykge1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycy9vcGVuYWktY29tcGxldGlvbnMudHMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhtb2RlbDogTW9kZWw8XCJvcGVuYWktY29tcGxldGlvbnNcIj4sIGNvbnRleHQ6IENvbnRleHQsIG9wdGlvbnM/OiBPcGVuQUlDb21wbGV0aW9uc09wdGlvbnMpIHtcbnN1cHBvcnRzUmVhc29uaW5nRWZmb3J0OiBtb2RlbC5jb21wYXQuc3VwcG9ydHNSZWFzb25pbmdFZmZvcnQgPz9cbm1heFRva2Vuc0ZpZWxkOiBtb2RlbC5jb21wYXQubWF4VG9rZW5zRmllbGQgPz9cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kXG5cbmdvb2dsZS50cyAtIEdvb2dsZSBHZW5lcmF0aXZlIEFJIMK3IGFtYXpvbi1iZWRyb2NrLnRzIC0gQVdTIEJlZHJvY2sgwrcgQWxsIHByb3ZpZGVycyBmb2xsb3cgdGhlIHNhbWUgcGF0dGVybjogaW1wb3J0IHsgdHlwZSBBc3Npc3RhbnRNZXNzYWdlLCB0eXBlIEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSwgdHlwZSBDb250ZXh0LCB0eXBlIE1vZGVsLCB0eXBlIFNpbXBsZVN0cmVhbU9wdGlvbnMsIGNhbGN1bGF0ZUNvc3QsIGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSwgfSBmcm9tICZxdW90O0BtYXJpb3plY2huZXIvcGktYWkmcXVvdDs7IGZ1bmN0aW9uIHN0cmVhbU15UHJvdmlkZXIoIG1vZGVsOiBNb2RlbCZsdDthbnkmZ3Q7LCBjb250ZXh0OiBDb250ZXh0LCBvcHRpb25zPzogU2ltcGxlU3RyZWFtT3B0aW9ucyApOiBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0geyBjb25zdCBzdHJlYW0gPSBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0oKTsgKGFzeW5jICgpID0mZ3Q7IHsgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgbWVzc2FnZSBjb25zdCBvdXRwdXQ6IEFzc2lzdGFudE1lc3NhZ2UgPSB7IHJvbGU6ICZxdW90O2Fzc2lzdGFudCZxdW90OywgY29udGVudDogW10sIGFwXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9jdXN0b20tcHJvdmlkZXIubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5nb29nbGUudHMgLSBHb29nbGUgR2VuZXJhdGl2ZSBBSSDCtyBhbWF6b24tYmVkcm9jay50cyAtIEFXUyBCZWRyb2NrIMK3IEFsbCBwcm92aWRlcnMgZm9sbG93IHRoZSBzYW1lIHBhdHRlcm46IGltcG9ydCB7IHR5cGUgQXNzaXN0YW50TWVzc2FnZSwgdHlwZSBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0sIHR5cGUgQ29udGV4dCwgdHlwZSBNb2RlbCwgdHlwZSBTaW1wbGVTdHJlYW1PcHRpb25zLCBjYWxjdWxhdGVDb3N0LCBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0sIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktYWlcIjsgZnVuY3Rpb24gc3RyZWFtTXlQcm92aWRlciggbW9kZWw6IE1vZGVsPGFueT4sIGNvbnRleHQ6IENvbnRleHQsIG9wdGlvbnM/OiBTaW1wbGVTdHJlYW1PcHRpb25zICk6IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSB7IGNvbnN0IHN0cmVhbSA9IGNyZWF0ZUFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSgpOyAoYXN5bmMgKCkgPT4geyAvLyBJbml0aWFsaXplIG91dHB1dCBtZXNzYWdlIGNvbnN0IG91dHB1dDogQXNzaXN0YW50TWVzc2FnZSA9IHsgcm9sZTogXCJhc3Npc3RhbnRcIiwgY29udGVudDogW10sIGFwXG5XaGVuIG9ubHkgYmFzZVVybCBhbmQvb3IgaGVhZGVycyBhcmUgcHJvdmlkZWQgKG5vIG1vZGVscyksIGFsbCBleGlzdGluZyBtb2RlbHMgZm9yIHRoYXQgcHJvdmlkZXIgYXJlIHByZXNlcnZlZCB3aXRoIHRoZSBuZXcgZW5kcG9pbnQuXG5UbyBhZGQgYSBjb21wbGV0ZWx5IG5ldyBwcm92aWRlciwgc3BlY2lmeSBtb2RlbHMgYWxvbmcgd2l0aCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbi5cblxuLS0tXG5cbiMjIFJlbGVhc2VzIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vcmVsZWFzZXNcblxuRXhwYW5kZWQgQ0xJIG1vZGVsIHNlbGVjdGlvbjogLS1tb2RlbCBub3cgc3VwcG9ydHMgcHJvdmlkZXIvaWQsIGZ1enp5IG1hdGNoaW5nLCBhbmQgOiZsdDt0aGlua2luZyZndDsgc3VmZml4ZXMuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuRml4ZWQgZXh0ZW5zaW9uIHNvdXJjZSBwYXJzaW5nIHNvIGRvdC1wcmVmaXhlZCBsb2NhbCBwYXRocyAoZm9yIGV4YW1wbGUgLnBpL2V4dGVuc2lvbnMvZm9vLnRzKSBhcmUgdHJlYXRlZCBhcyBsb2NhbCBwYXRocyBpbnN0ZWFkIG9mIGdpdCBVUkxzXG5BZGRlZCBNaW5pTWF4IE0yLjUgbW9kZWwgZW50cmllcyBmb3IgbWluaW1heCwgbWluaW1heC1jbiwgb3BlbnJvdXRlciwgYW5kIHZlcmNlbC1haS1nYXRld2F5IHByb3ZpZGVycywgcGx1cyBtaW5pbWF4LW0yLjUtZnJlZSBmb3Igb3BlbmNvZGUuXG5FeHBhbmRlZCBDTEkgbW9kZWwgc2VsZWN0aW9uOiAtLW1vZGVsIG5vdyBzdXBwb3J0cyBwcm92aWRlci9pZCwgZnV6enkgbWF0Y2hpbmcsIGFuZCA6PHRoaW5raW5nPiBzdWZmaXhlcy5cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50IGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50XG5cbiMgSW50ZXJhY3RpdmUgd2l0aCBpbml0aWFsIHByb21wdCBwaSAmcXVvdDtMaXN0IGFsbCAudHMgZmlsZXMgaW4gc3JjLyZxdW90OyAjIE5vbi1pbnRlcmFjdGl2ZSBwaSAtcCAmcXVvdDtTdW1tYXJpemUgdGhpcyBjb2RlYmFzZSZxdW90OyAjIERpZmZlcmVudCBtb2RlbCBwaSAtLXByb3ZpZGVyIG9wZW5haSAtLW1vZGVsIGdwdC00byAmcXVvdDtIZWxwIG1lIHJlZmFjdG9yJnF1b3Q7ICMgTW9kZWwgd2l0aCBwcm92aWRlciBwcmVmaXggKG5vIC0tcHJvdmlkZXIgbmVlZGVkKSBwaSAtLW1vZGVsIG9wZW5haS9ncHQtNG8gJnF1b3Q7SGVscCBtZSByZWZhY3RvciZxdW90OyAjIE1vZGVsIHdpdGggdGhpbmtpbmcgbGV2ZWwgc2hvcnRoYW5kIHBpIC0tbW9kZWwgc29ubmV0OmhpZ2ggJnF1b3Q7U29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW0mcXVvdDsgIyBMaW1pdCBtb2RlbCBjeWNsaW5nIHBpIC0tbW9kZWxzICZxdW90O2NsYXVkZS0qLGdwdC00byZxdW90OyAjIFJlYWQtb25seSBtb2RlIHBpIC0tdG9vbHMgcmVhZCxncmVwLGZpbmQsbHMgLXAgJnF1b3Q7UmV2aWV3IHRoZSBjb2RlJnF1b3Q7ICMgSGlnaCB0aGlua2luZyBsZXZlbCBwaSAtLXRoaW5raW5nIGhpZ2ggJnF1b3Q7U29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW0mcXVvdDtcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbiMgSW50ZXJhY3RpdmUgd2l0aCBpbml0aWFsIHByb21wdCBwaSBcIkxpc3QgYWxsIC50cyBmaWxlcyBpbiBzcmMvXCIgIyBOb24taW50ZXJhY3RpdmUgcGkgLXAgXCJTdW1tYXJpemUgdGhpcyBjb2RlYmFzZVwiICMgRGlmZmVyZW50IG1vZGVsIHBpIC0tcHJvdmlkZXIgb3BlbmFpIC0tbW9kZWwgZ3B0LTRvIFwiSGVscCBtZSByZWZhY3RvclwiICMgTW9kZWwgd2l0aCBwcm92aWRlciBwcmVmaXggKG5vIC0tcHJvdmlkZXIgbmVlZGVkKSBwaSAtLW1vZGVsIG9wZW5haS9ncHQtNG8gXCJIZWxwIG1lIHJlZmFjdG9yXCIgIyBNb2RlbCB3aXRoIHRoaW5raW5nIGxldmVsIHNob3J0aGFuZCBwaSAtLW1vZGVsIHNvbm5ldDpoaWdoIFwiU29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW1cIiAjIExpbWl0IG1vZGVsIGN5Y2xpbmcgcGkgLS1tb2RlbHMgXCJjbGF1ZGUtKixncHQtNG9cIiAjIFJlYWQtb25seSBtb2RlIHBpIC0tdG9vbHMgcmVhZCxncmVwLGZpbmQsbHMgLXAgXCJSZXZpZXcgdGhlIGNvZGVcIiAjIEhpZ2ggdGhpbmtpbmcgbGV2ZWwgcGkgLS10aGlua2luZyBoaWdoIFwiU29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW1cIlxuQ29tYmluZSAtLW5vLSogd2l0aCBleHBsaWNpdCBmbGFncyB0byBsb2FkIGV4YWN0bHkgd2hhdCB5b3UgbmVlZCwgaWdub3Jpbmcgc2V0dGluZ3MuanNvbiAoZS5nLiwgLS1uby1leHRlbnNpb25zIC1lIC4vbXktZXh0LnRzKS5cblRoZW4ganVzdCB0YWxrIHRvIHBpLiBCeSBkZWZhdWx0LCBwaSBnaXZlcyB0aGUgbW9kZWwgZm91ciB0b29sczogcmVhZCwgd3JpdGUsIGVkaXQsIGFuZCBiYXNoLiBUaGUgbW9kZWwgdXNlcyB0aGVzZSB0byBmdWxmaWxsIHlvdXIgcmVxdWVzdHMuXG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2FpIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvYWlcblxuTm90ZTogVGhpcyBsaWJyYXJ5IG9ubHkgaW5jbHVkZXMgbW9kZWxzIHRoYXQgc3VwcG9ydCB0b29sIGNhbGxpbmcgKGZ1bmN0aW9uIGNhbGxpbmcpLCBhcyB0aGlzIGlzIGVzc2VudGlhbCBmb3IgYWdlbnRpYyB3b3JrZmxvd3MuIC4uLiBBbnkgT3BlbkFJLWNvbXBhdGlibGUgQVBJOiBPbGxhbWEsIHZMTE0sIExNIFN0dWRpbywgZXRjLiAuLi4gVHlwZUJveCBleHBvcnRzIGFyZSByZS1leHBvcnRlZCBmcm9tIEBtYXJpb3plY2huZXIvcGktYWk6IFR5cGUsIFN0YXRpYywgYW5kIFRTY2hlbWEuXG5JZiB0aGUgcHJvdmlkZXIgZXhwb3NlcyBtdWx0aXBsZSBtb2RlbCBmYW1pbGllcyAoZm9yIGV4YW1wbGUgR1BUIGFuZCBDbGF1ZGUpLCBhZGQgYXQgbGVhc3Qgb25lIHBhaXIgcGVyIGZhbWlseS4gRm9yIHByb3ZpZGVycyB3aXRoIG5vbi1zdGFuZGFyZCBhdXRoIChBV1MsIEdvb2dsZSBWZXJ0ZXgpLCBjcmVhdGUgYSB1dGlsaXR5IGxpa2UgYmVkcm9jay11dGlscy50cyB3aXRoIGNyZWRlbnRpYWwgZGV0ZWN0aW9uIGhlbHBlcnMuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWkgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5Gb3IgY3Jvc3MtcHJvdmlkZXItaGFuZG9mZi50ZXN0LnRzLCBhZGQgYXQgbGVhc3Qgb25lIHByb3ZpZGVyL21vZGVsIHBhaXIuXG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Nkay5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Nkay5tZFxuXG5TZWUgZXhhbXBsZXMvc2RrLzEwLXNldHRpbmdzLnRzIMK3IEFsbCBkaXNjb3ZlcnkgZnVuY3Rpb25zIGFjY2VwdCBvcHRpb25hbCBjd2QgYW5kIGFnZW50RGlyIHBhcmFtZXRlcnMuIGltcG9ydCB7IGdldE1vZGVsIH0gZnJvbSAmcXVvdDtAbWFyaW96ZWNobmVyL3BpLWFpJnF1b3Q7OyBpbXBvcnQgeyBBdXRoU3RvcmFnZSwgTW9kZWxSZWdpc3RyeSwgZGlzY292ZXJBdXRoU3RvcmFnZSwgZGlzY292ZXJNb2RlbHMsIGRpc2NvdmVyU2tpbGxzLCBkaXNjb3ZlckV4dGVuc2lvbnMsIGRpc2NvdmVyQ29udGV4dEZpbGVzLCBkaXNjb3ZlclByb21wdFRlbXBsYXRlcywgbG9hZFNldHRpbmdzLCBidWlsZFN5c3RlbVByb21wdCwgY3JlYXRlRXZlbnRCdXMsIH0gZnJvbSAmcXVvdDtAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudCZxdW90OzsgLy8gQXV0aCBhbmQgTW9kZWxzIGNvbnN0IGF1dGhTdG9yYWdlID0gZGlzY292ZXJBdXRoU3RvcmFnZSgpOyAvLyB+Ly5waS9hZ2VudC9hdXRoLmpzb24gY29uc3QgbW9kZWxSZWdpc3RyeSA9IGRpc2NvdmVyTW9kZWxzKGF1dGhTdG9yYWdlKTsgLy8gKyB+Ly5waS9hZ2VudC9tb2RlbHMuanNvbiBjb25zdCBhbGxNb2RlbHMgPSBtb2RlbFJlZ2lzdHJ5LmdldFxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3Mvc2RrLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuU2VlIGV4YW1wbGVzL3Nkay8xMC1zZXR0aW5ncy50cyDCtyBBbGwgZGlzY292ZXJ5IGZ1bmN0aW9ucyBhY2NlcHQgb3B0aW9uYWwgY3dkIGFuZCBhZ2VudERpciBwYXJhbWV0ZXJzLiBpbXBvcnQgeyBnZXRNb2RlbCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI7IGltcG9ydCB7IEF1dGhTdG9yYWdlLCBNb2RlbFJlZ2lzdHJ5LCBkaXNjb3ZlckF1dGhTdG9yYWdlLCBkaXNjb3Zlck1vZGVscywgZGlzY292ZXJTa2lsbHMsIGRpc2NvdmVyRXh0ZW5zaW9ucywgZGlzY292ZXJDb250ZXh0RmlsZXMsIGRpc2NvdmVyUHJvbXB0VGVtcGxhdGVzLCBsb2FkU2V0dGluZ3MsIGJ1aWxkU3lzdGVtUHJvbXB0LCBjcmVhdGVFdmVudEJ1cywgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjsgLy8gQXV0aCBhbmQgTW9kZWxzIGNvbnN0IGF1dGhTdG9yYWdlID0gZGlzY292ZXJBdXRoU3RvcmFnZSgpOyAvLyB+Ly5waS9hZ2VudC9hdXRoLmpzb24gY29uc3QgbW9kZWxSZWdpc3RyeSA9IGRpc2NvdmVyTW9kZWxzKGF1dGhTdG9yYWdlKTsgLy8gKyB+Ly5waS9hZ2VudC9tb2RlbHMuanNvbiBjb25zdCBhbGxNb2RlbHMgPSBtb2RlbFJlZ2lzdHJ5LmdldFxuU2VlIGV4YW1wbGVzL3Nkay8wNi1leHRlbnNpb25zLnRzIGFuZCBkb2NzL2V4dGVuc2lvbnMubWRcblNlZSBleGFtcGxlcy9zZGsvMTEtc2Vzc2lvbnMudHMgYW5kIGRvY3Mvc2Vzc2lvbi5tZFxuXG4tLS1cblxuIyMgTWVyZ2UgaG9va3MgYW5kIGN1c3RvbSB0b29scyBpbnRvIHVuaWZpZWQgZXh0ZW5zaW9ucyDCtyBJc3N1ZSAjNDU0IMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vaXNzdWVzLzQ1NFxuXG4ucGkvZXh0ZW5zaW9ucy8qLnRzIMK3IE5ldyBzZXR0aW5nczogZXh0ZW5zaW9ucyBhcnJheSAoZGVwcmVjYXRlIGhvb2tzIGFuZCBjdXN0b21Ub29scykgTmV3IENMSSBmbGFnOiAtLWV4dGVuc2lvbiAoZGVwcmVjYXRlIC0taG9vayBhbmQgLS10b29sKSBCYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBLZWVwIGRpc2NvdmVyaW5nIGZyb20gb2xkIGxvY2F0aW9ucyAoaG9va3MvLCB0b29scy8pIHdpdGggZGVwcmVjYXRpb24gd2FybmluZ3MgwrcgUmVtb3ZlOiBvblNlc3Npb24gY2FsbGJhY2sgZnJvbSB0b29scyAodXNlIHBpLm9uKCZxdW90O3Nlc3Npb25fc3RhcnQmcXVvdDspIGV0Yy4gaW5zdGVhZCkgVXBkYXRlIGRvY3M6IE1lcmdlIGhvb2tzLm1kIGFuZCBjdXN0b20tdG9vbHMubWQgaW50byBleHRlbnNpb25zLm1kIMK3IFNpbmdsZSBtZW50YWwgbW9kZWwgwrdcblByb2JsZW0gSG9va3MgYW5kIGN1c3RvbSB0b29scyBhcmUgdHdvIHNlcGFyYXRlIGNvbmNlcHRzIHdpdGggbmVhcmx5IGlkZW50aWNhbCBsb2FkZXIgaW5mcmFzdHJ1Y3R1cmU6IER1cGxpY2F0ZSBnZXRBbGlhc2VzKCksIGV4cGFuZFBhdGgoKSwgbm9ybWFsaXplVW5pY29kZVNwYWNlcygpIER1cGxpY2F0ZSBwYXRoIHJlc29sdXRpb24gbG9naWMgRHVwbGljYXRlIGRpc2NvdmVyeSBwYXR0ZXJucyAoZGlzY292ZXJYSS4uLlxuLnBpL2V4dGVuc2lvbnMvKi50cyDCtyBOZXcgc2V0dGluZ3M6IGV4dGVuc2lvbnMgYXJyYXkgKGRlcHJlY2F0ZSBob29rcyBhbmQgY3VzdG9tVG9vbHMpIE5ldyBDTEkgZmxhZzogLS1leHRlbnNpb24gKGRlcHJlY2F0ZSAtLWhvb2sgYW5kIC0tdG9vbCkgQmFja3dhcmQgY29tcGF0aWJpbGl0eTogS2VlcCBkaXNjb3ZlcmluZyBmcm9tIG9sZCBsb2NhdGlvbnMgKGhvb2tzLywgdG9vbHMvKSB3aXRoIGRlcHJlY2F0aW9uIHdhcm5pbmdzIMK3IFJlbW92ZTogb25TZXNzaW9uIGNhbGxiYWNrIGZyb20gdG9vbHMgKHVzZSBwaS5vbihcInNlc3Npb25fc3RhcnRcIikgZXRjLiBpbnN0ZWFkKSBVcGRhdGUgZG9jczogTWVyZ2UgaG9va3MubWQgYW5kIGN1c3RvbS10b29scy5tZCBpbnRvIGV4dGVuc2lvbnMubWQgwrcgU2luZ2xlIG1lbnRhbCBtb2RlbCDCt1xuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvc3lzdGVtLXByb21wdC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9zeXN0ZW0tcHJvbXB0LnRzXG5cbi0gV2hlbiBhc2tlZCBhYm91dDogZXh0ZW5zaW9ucyAoZG9jcy9leHRlbnNpb25zLm1kLCBleGFtcGxlcy9leHRlbnNpb25zLyksIHRoZW1lcyAoZG9jcy90aGVtZXMubWQpLCBza2lsbHMgKGRvY3Mvc2tpbGxzLm1kKSwgcHJvbXB0IHRlbXBsYXRlcyAoZG9jcy9wcm9tcHQtdGVtcGxhdGVzLm1kKSwgVFVJIGNvbXBvbmVudHMgKGRvY3MvdHVpLm1kKSwga2V5YmluZGluZ3MgKGRvY3Mva2V5YmluZGluZ3MubWQpLCBTREsgaW50ZWdyYXRpb25zIChkb2NzL3Nkay5tZCksIGN1c3RvbSBwcm92aWRlcnMgKGRvY3MvY3VzdG9tLXByb3ZpZGVyLm1kKSwgYWRkaW5nIG1vZGVscyAoZG9jcy9tb2RlbHMubWQpLCBwaSBwYWNrYWdlcyAoZG9jcy9wYWNrYWdlcy5tZClcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9zeXN0ZW0tcHJvbXB0LnRzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuLSBXaGVuIGFza2VkIGFib3V0OiBleHRlbnNpb25zIChkb2NzL2V4dGVuc2lvbnMubWQsIGV4YW1wbGVzL2V4dGVuc2lvbnMvKSwgdGhlbWVzIChkb2NzL3RoZW1lcy5tZCksIHNraWxscyAoZG9jcy9za2lsbHMubWQpLCBwcm9tcHQgdGVtcGxhdGVzIChkb2NzL3Byb21wdC10ZW1wbGF0ZXMubWQpLCBUVUkgY29tcG9uZW50cyAoZG9jcy90dWkubWQpLCBrZXliaW5kaW5ncyAoZG9jcy9rZXliaW5kaW5ncy5tZCksIFNESyBpbnRlZ3JhdGlvbnMgKGRvY3Mvc2RrLm1kKSwgY3VzdG9tIHByb3ZpZGVycyAoZG9jcy9jdXN0b20tcHJvdmlkZXIubWQpLCBhZGRpbmcgbW9kZWxzIChkb2NzL21vZGVscy5tZCksIHBpIHBhY2thZ2VzIChkb2NzL3BhY2thZ2VzLm1kKVxuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9wcm92aWRlcnMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9wcm92aWRlcnMubWRcblxuQW50aWdyYXZpdHk6IFNhbmRib3ggd2l0aCBHZW1pbmkgMywgQ2xhdWRlLCBhbmQgR1BULU9TUyBtb2RlbHMgwrcgQm90aCBmcmVlIHdpdGggYW55IEdvb2dsZSBhY2NvdW50LCBzdWJqZWN0IHRvIHJhdGUgbGltaXRzIMK3IEZvciBwYWlkIENsb3VkIENvZGUgQXNzaXN0OiBzZXQgR09PR0xFX0NMT1VEX1BST0pFQ1QgZW52IHZhciAuLi4gUmVmZXJlbmNlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGF1dGguanNvbiBrZXlzOiBjb25zdCBlbnZNYXAgaW4gcGFja2FnZXMvYWkvc3JjL2Vudi1hcGkta2V5cy50cy5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Byb3ZpZGVycy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblZpYSBtb2RlbHMuanNvbjogQWRkIE9sbGFtYSwgTE0gU3R1ZGlvLCB2TExNLCBvciBhbnkgcHJvdmlkZXIgdGhhdCBzcGVha3MgYSBzdXBwb3J0ZWQgQVBJIChPcGVuQUkgQ29tcGxldGlvbnMsIE9wZW5BSSBSZXNwb25zZXMsIEFudGhyb3BpYyBNZXNzYWdlcywgR29vZ2xlIEdlbmVyYXRpdmUgQUkpLlxuQW50aWdyYXZpdHk6IFNhbmRib3ggd2l0aCBHZW1pbmkgMywgQ2xhdWRlLCBhbmQgR1BULU9TUyBtb2RlbHMgwrcgQm90aCBmcmVlIHdpdGggYW55IEdvb2dsZSBhY2NvdW50LCBzdWJqZWN0IHRvIHJhdGUgbGltaXRzIMK3IEZvciBwYWlkIENsb3VkIENvZGUgQXNzaXN0OiBzZXQgR09PR0xFX0NMT1VEX1BST0pFQ1QgZW52IHZhciAuLi4gUmVmZXJlbmNlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGF1dGguanNvbiBrZXlzOiBjb25zdCBlbnZNYXAgaW4gcGFja2FnZXMvYWkvc3JjL2Vudi1hcGkta2V5cy50cy5cblBpIHN1cHBvcnRzIHN1YnNjcmlwdGlvbi1iYXNlZCBwcm92aWRlcnMgdmlhIE9BdXRoIGFuZCBBUEkga2V5IHByb3ZpZGVycyB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGF1dGggZmlsZS4gRm9yIGVhY2ggcHJvdmlkZXIsIHBpIGtub3dzIGFsbCBhdmFpbGFibGUgbW9kZWxzLlxuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9haS9SRUFETUUubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9SRUFETUUubWRcblxuSWYgdGhlIHByb3ZpZGVyIGV4cG9zZXMgbXVsdGlwbGUgbW9kZWwgZmFtaWxpZXMgKGZvciBleGFtcGxlIEdQVCBhbmQgQ2xhdWRlKSwgYWRkIGF0IGxlYXN0IG9uZSBwYWlyIHBlciBmYW1pbHkuIEZvciBwcm92aWRlcnMgd2l0aCBub24tc3RhbmRhcmQgYXV0aCAoQVdTLCBHb29nbGUgVmVydGV4KSwgY3JlYXRlIGEgdXRpbGl0eSBsaWtlIGJlZHJvY2stdXRpbHMudHMgd2l0aCBjcmVkZW50aWFsIGRldGVjdGlvbiBoZWxwZXJzLlxuSWYgdGhlIHByb3ZpZGVyIGV4cG9zZXMgbXVsdGlwbGUgbW9kZWwgZmFtaWxpZXMgKGZvciBleGFtcGxlIEdQVCBhbmQgQ2xhdWRlKSwgYWRkIGF0IGxlYXN0IG9uZSBwYWlyIHBlciBmYW1pbHkuIEZvciBwcm92aWRlcnMgd2l0aCBub24tc3RhbmRhcmQgYXV0aCAoQVdTLCBHb29nbGUgVmVydGV4KSwgY3JlYXRlIGEgdXRpbGl0eSBsaWtlIGJlZHJvY2stdXRpbHMudHMgd2l0aCBjcmVkZW50aWFsIGRldGVjdGlvbiBoZWxwZXJzLlxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2FpL1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbkZvciBjcm9zcy1wcm92aWRlci1oYW5kb2ZmLnRlc3QudHMsIGFkZCBhdCBsZWFzdCBvbmUgcHJvdmlkZXIvbW9kZWwgcGFpci5cblxuLS0tXG5cbiMjIEdpdEh1YiAtIGJhZGxvZ2ljL3BpLW1vbm86IEFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHNcblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm9cblxuTm90ZTogbnBtIHJ1biBjaGVjayByZXF1aXJlcyBucG0gcnVuIGJ1aWxkIHRvIGJlIHJ1biBmaXJzdC4gVGhlIHdlYi11aSBwYWNrYWdlIHVzZXMgdHNjIHdoaWNoIG5lZWRzIGNvbXBpbGVkIC5kLnRzIGZpbGVzIGZyb20gZGVwZW5kZW5jaWVzLlxuTm90ZTogbnBtIHJ1biBjaGVjayByZXF1aXJlcyBucG0gcnVuIGJ1aWxkIHRvIGJlIHJ1biBmaXJzdC4gVGhlIHdlYi11aSBwYWNrYWdlIHVzZXMgdHNjIHdoaWNoIG5lZWRzIGNvbXBpbGVkIC5kLnRzIGZpbGVzIGZyb20gZGVwZW5kZW5jaWVzLlxuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9hZ2VudCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vdHJlZS9tYWluL3BhY2thZ2VzL2FnZW50XG5cbmludGVyZmFjZSBBZ2VudFN0YXRlIHsgc3lzdGVtUHJvbXB0OiBzdHJpbmc7IG1vZGVsOiBNb2RlbCZsdDthbnkmZ3Q7OyB0aGlua2luZ0xldmVsOiBUaGlua2luZ0xldmVsOyB0b29sczogQWdlbnRUb29sJmx0O2FueSZndDtbXTsgbWVzc2FnZXM6IEFnZW50TWVzc2FnZVtdOyBpc1N0cmVhbWluZzogYm9vbGVhbjsgc3RyZWFtTWVzc2FnZTogQWdlbnRNZXNzYWdlIHwgbnVsbDsgLy8gQ3VycmVudCBwYXJ0aWFsIGR1cmluZyBzdHJlYW1pbmcgcGVuZGluZ1Rvb2xDYWxsczogU2V0Jmx0O3N0cmluZyZndDs7IGVycm9yPzogc3RyaW5nOyB9XG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9hZ2VudCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktYWdlbnQtY29yZVwiOyBpbXBvcnQgeyBnZXRNb2RlbCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI7IGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHsgaW5pdGlhbFN0YXRlOiB7IHN5c3RlbVByb21wdDogXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuXCIsIG1vZGVsOiBnZXRNb2RlbChcImFudGhyb3BpY1wiLCBcImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNFwiKSwgfSwgfSk7IGFnZW50LnN1YnNjcmliZSgoZXZlbnQpID0+IHsgaWYgKGV2ZW50LnR5cGUgPT09IFwibWVzc2FnZV91cGRhdGVcIiAmJiBldmVudC5hc3Npc3RhbnRNZXNzYWdlRXZlbnQudHlwZSA9PT0gXCJ0ZXh0X2RlbHRhXCIpIHsgLy8gU3RyZWFtIGp1c3QgdGhlIG5ldyB0ZXh0IGNodW5rIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGV2ZW50LmFzc2lzdGFudE1lc3NhZ2VFdmVudC5kZWx0YSk7IH0gfSk7IGF3YWl0IGFnZW50LnByb21wdChcIkhlbGxvIVwiKTtcbmNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHsgLy8gSW5pdGlhbCBzdGF0ZSBpbml0aWFsU3RhdGU6IHsgc3lzdGVtUHJvbXB0OiBzdHJpbmcsIG1vZGVsOiBNb2RlbDxhbnk+LCB0aGlua2luZ0xldmVsOiBcIm9mZlwiIHwgXCJtaW5pbWFsXCIgfCBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiIHwgXCJ4aGlnaFwiLCB0b29sczogQWdlbnRUb29sPGFueT5bXSwgbWVzc2FnZXM6IEFnZW50TWVzc2FnZVtdLCB9LCAvLyBDb252ZXJ0IEFnZW50TWVzc2FnZVtdIHRvIExMTSBNZXNzYWdlW10gKHJlcXVpcmVkIGZvciBjdXN0b20gbWVzc2FnZSB0eXBlcykgY29udmVydFRvTGxtOiAobWVzc2FnZXMpID0+IG1lc3NhZ2VzLmZpbHRlciguLi4pLCAvLyBUcmFuc2Zvcm0gY29udGV4dCBiZWZvcmUgY29udmVydFRvTGxtIChmb3IgcHJ1bmluZywgY29tcGFjdGlvbikgdHJhbnNmb3JtQ29udGV4dDogYXN5bmMgKG1lc3NhZ2VzLCBzaWduYWwpID0+IHBydW5lT2xkTWVzc2FnZXMobWVzc2FnZXMpLCAvLyBTdGVlcmluZyBtb2RlOiBcIm9uZS1hdC1hLXRpbWVcIiAoZGVmYXVsdCkgb3IgXCJhbGxcIiBzdGVlcmluZ01vZGU6IFwib25lLWF0LWEtdGltZVwiLCAvLyBGb2xsb3ctdXAgbW9kZTogXCJcbmludGVyZmFjZSBBZ2VudFN0YXRlIHsgc3lzdGVtUHJvbXB0OiBzdHJpbmc7IG1vZGVsOiBNb2RlbDxhbnk+OyB0aGlua2luZ0xldmVsOiBUaGlua2luZ0xldmVsOyB0b29sczogQWdlbnRUb29sPGFueT5bXTsgbWVzc2FnZXM6IEFnZW50TWVzc2FnZVtdOyBpc1N0cmVhbWluZzogYm9vbGVhbjsgc3RyZWFtTWVzc2FnZTogQWdlbnRNZXNzYWdlIHwgbnVsbDsgLy8gQ3VycmVudCBwYXJ0aWFsIGR1cmluZyBzdHJlYW1pbmcgcGVuZGluZ1Rvb2xDYWxsczogU2V0PHN0cmluZz47IGVycm9yPzogc3RyaW5nOyB9XG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnNcblxuR2VuZXJhdGUgaW1hZ2VzIHZpYSBHb29nbGUgQW50aWdyYXZpdHkgd2l0aCBvcHRpb25hbCBzYXZlLXRvLWRpc2sgbW9kZXMgwrcgc3NoLnRzIMK3IERlbGVnYXRlIGFsbCB0b29scyB0byBhIHJlbW90ZSBtYWNoaW5lIHZpYSBTU0ggdXNpbmcgcGx1Z2dhYmxlIG9wZXJhdGlvbnMgwrcgc3ViYWdlbnQvIERlbGVnYXRlIHRhc2tzIHRvIHNwZWNpYWxpemVkIHN1YmFnZW50cyB3aXRoIGlzb2xhdGVkIGNvbnRleHQgd2luZG93cyDCtyBFeHRlbnNpb24gwrcgRGVzY3JpcHRpb24gwrcgcHJlc2V0LnRzIMK3IE5hbWVkIHByZXNldHMgZm9yIG1vZGVsLCB0aGlua2luZyBsZXZlbCwgdG9vbHMsIGFuZCBpbnN0cnVjdGlvbnMgdmlhIC0tcHJlc2V0IGZsYWcgYW5kIC9wcmVzZXQgY29tbWFuZCDCt1xuR2VuZXJhdGUgaW1hZ2VzIHZpYSBHb29nbGUgQW50aWdyYXZpdHkgd2l0aCBvcHRpb25hbCBzYXZlLXRvLWRpc2sgbW9kZXMgwrcgc3NoLnRzIMK3IERlbGVnYXRlIGFsbCB0b29scyB0byBhIHJlbW90ZSBtYWNoaW5lIHZpYSBTU0ggdXNpbmcgcGx1Z2dhYmxlIG9wZXJhdGlvbnMgwrcgc3ViYWdlbnQvIERlbGVnYXRlIHRhc2tzIHRvIHNwZWNpYWxpemVkIHN1YmFnZW50cyB3aXRoIGlzb2xhdGVkIGNvbnRleHQgd2luZG93cyDCtyBFeHRlbnNpb24gwrcgRGVzY3JpcHRpb24gwrcgcHJlc2V0LnRzIMK3IE5hbWVkIHByZXNldHMgZm9yIG1vZGVsLCB0aGlua2luZyBsZXZlbCwgdG9vbHMsIGFuZCBpbnN0cnVjdGlvbnMgdmlhIC0tcHJlc2V0IGZsYWcgYW5kIC9wcmVzZXQgY29tbWFuZCDCt1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG4jIExvYWQgYW4gZXh0ZW5zaW9uIHdpdGggLS1leHRlbnNpb24gZmxhZyBwaSAtLWV4dGVuc2lvbiBleGFtcGxlcy9leHRlbnNpb25zL3Blcm1pc3Npb24tZ2F0ZS50cyAjIE9yIGNvcHkgdG8gZXh0ZW5zaW9ucyBkaXJlY3RvcnkgZm9yIGF1dG8tZGlzY292ZXJ5IGNwIHBlcm1pc3Npb24tZ2F0ZS50cyB+Ly5waS9hZ2VudC9leHRlbnNpb25zLyAuLi4gTmFtZWQgcHJlc2V0cyBmb3IgbW9kZWwsIHRoaW5raW5nIGxldmVsLCB0b29scywgYW5kIGluc3RydWN0aW9ucyB2aWEgLS1wcmVzZXQgZmxhZyBhbmQgL3ByZXNldCBjb21tYW5kXG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbkFQSSB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiOyBpbXBvcnQgeyBUeXBlIH0gZnJvbSBcIkBzaW5jbGFpci90eXBlYm94XCI7IGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwaTogRXh0ZW5zaW9uQVBJKSB7IC8vIFN1YnNjcmliZSB0byBsaWZlY3ljbGUgZXZlbnRzIHBpLm9uKFwidG9vbF9jYWxsXCIsIGFzeW5jIChldmVudCwgY3R4KSA9PiB7IGlmIChldmVudC50b29sTmFtZSA9PT0gXCJiYXNoXCIgJiYgZXZlbnQuaW5wdXQuY29tbWFuZD8uaW5jbHVkZXMoXCJybSAtcmZcIikpIHsgY29uc3Qgb2sgPSBhd2FpdCBjdHgudWkuY29uZmlybShcIkRhbmdlcm91cyFcIiwgXCJBbGxvdyBybSAtcmY/XCIpOyBpZiAoIW9rKSByZXR1cm4geyBibG9jazogdHJ1ZSwgcmVhc29uOiBcIkJsb2NrZWQgYnkgdXNlclwiIH07IH0gfSk7IC8vIFJlZ2lzdGVyIGN1c3RvbSB0b29scyBwaS5yZWdpc3RlclRvb2woeyBuYW1lOiBcImdyZWV0XCIsIGxhYmVsOiBcIkdyZWV0aW5nXCIsIGRlc2NyaXB0aW9uOiBcIkdlbmVyYXRlIGEgZ3JlZXRpbmdcIiwgcGFyYW1ldGVyczogVHlwZS5PYmplY3QoeyBuYW1lOiBUeXBlLlN0cmluZyh7IGRlc2NyXG5cbi0tLVxuXG4jIyBDdXN0b20gdG9vbHMgwrcgSXNzdWUgIzE5MCDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2lzc3Vlcy8xOTBcblxucGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2N1c3RvbS10b29scy8g4pSc4pSA4pSAIHR5cGVzLnRzICMgQ3VzdG9tVG9vbEZhY3RvcnksIFRvb2xBUEksIFRvb2xSZW5kZXJBUEksIEN1c3RvbUFnZW50VG9vbCDilJzilIDilIAgbG9hZGVyLnRzICMgTG9hZCBhbmQgZGlzY292ZXIgY3VzdG9tIHRvb2xzIOKUnOKUgOKUgCByZW5kZXItaGVscGVycy50cyAjIEltcGxlbWVudGF0aW9uIG9mIFRvb2xSZW5kZXJBUEkgaGVscGVycyDilJTilIDilIAgaW5kZXgudHMgIyBFeHBvcnRzXG5WaWJlIHNsb3BwZWQgdGhpcyBmcm9tIG15IHBob25lIGluIGEgaG90ZWwgd2l0aCBtb20sIGp1c3QgZ2l2ZXMgdGhlIGRpcmVjdGlvbiBJIHdhbnQgdG8gZ28gdG93YXJkcywgbm90IGZpbmFsIGRlc2lnbi4gQ3VzdG9tIFRvb2xzIFByb3Bvc2FsIFRoaXMgZG9jdW1lbnQgcHJvcG9zZXMgYSBtZWNoYW5pc20gZm9yIHVzZXJzIHRvIGFkZCBjdXN0b20gdG9vbHMgdG8gY29kaW5nLWFnZW50LCBzaW1pbGFyIHRvIHRoZSAuLi5cbnBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9jdXN0b20tdG9vbHMvIOKUnOKUgOKUgCB0eXBlcy50cyAjIEN1c3RvbVRvb2xGYWN0b3J5LCBUb29sQVBJLCBUb29sUmVuZGVyQVBJLCBDdXN0b21BZ2VudFRvb2wg4pSc4pSA4pSAIGxvYWRlci50cyAjIExvYWQgYW5kIGRpc2NvdmVyIGN1c3RvbSB0b29scyDilJzilIDilIAgcmVuZGVyLWhlbHBlcnMudHMgIyBJbXBsZW1lbnRhdGlvbiBvZiBUb29sUmVuZGVyQVBJIGhlbHBlcnMg4pSU4pSA4pSAIGluZGV4LnRzICMgRXhwb3J0c1xuLy8gfi8ucGkvYWdlbnQvdG9vbHMvaHR0cC50cyBpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQHNpbmNsYWlyL3R5cGVib3gnOyBpbXBvcnQgdHlwZSB7IEN1c3RvbVRvb2xGYWN0b3J5IH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnQnOyBjb25zdCBmYWN0b3J5OiBDdXN0b21Ub29sRmFjdG9yeSA9IChhcGkpID0+IHsgcmV0dXJuIHsgbmFtZTogJ2h0dHAnLCBsYWJlbDogJ0hUVFAgUmVxdWVzdCcsIGRlc2NyaXB0aW9uOiAnTWFrZSBhbiBIVFRQIHJlcXVlc3QgYW5kIHJldHVybiB0aGUgcmVzcG9uc2UnLCBwYXJhbWV0ZXJzOiBUeXBlLk9iamVjdCh7IHVybDogVHlwZS5TdHJpbmcoeyBkZXNjcmlwdGlvbjogJ1VSTCB0byByZXF1ZXN0JyB9KSwgbWV0aG9kOiBUeXBlLk9wdGlvbmFsKFR5cGUuU3RyaW5nKHsgZGVzY3JpcHRpb246ICdIVFRQIG1ldGhvZCAoR0VULCBQT1NULCBldGMuKScgfSkpIH0pLCBleGVjdXRlOiBhc3luYyAodG9vbENhbGxJZCwgcGFyYW1zKSA9PiB7IGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocGFyYW1zLnVybCwgeyBtZXRob2Q6IHBhcmFtcy5tZXRob2QgfHwgJ0dFVCcgfSk7IGNvbnN0IHRleHQgPSBhd2FpXG4vLyB+Ly5waS9hZ2VudC90b29scy9kZWxldGUtZmlsZS50cyBpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQHNpbmNsYWlyL3R5cGVib3gnOyBpbXBvcnQgeyB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJzsgaW1wb3J0IHR5cGUgeyBDdXN0b21Ub29sRmFjdG9yeSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50JzsgY29uc3QgZmFjdG9yeTogQ3VzdG9tVG9vbEZhY3RvcnkgPSAoYXBpKSA9PiB7IHJldHVybiB7IG5hbWU6ICdkZWxldGUtZmlsZScsIGxhYmVsOiAnRGVsZXRlIEZpbGUnLCBkZXNjcmlwdGlvbjogJ0RlbGV0ZSBhIGZpbGUgd2l0aCBjb25maXJtYXRpb24gcHJvbXB0JywgcGFyYW1ldGVyczogVHlwZS5PYmplY3QoeyBwYXRoOiBUeXBlLlN0cmluZyh7IGRlc2NyaXB0aW9uOiAnUGF0aCB0byBmaWxlIHRvIGRlbGV0ZScgfSkgfSksIGV4ZWN1dGU6IGFzeW5jICh0b29sQ2FsbElkLCBwYXJhbXMpID0+IHsgLy8gQXNrIGZvciBjb25maXJtYXRpb24gaWYgVUkgaXMgYXZhaWxhYmxlIGlmIChhcGkuaGFzVUkpIHsgY29uc3QgY29uZmlybWVkID0gYXdhaXQgYXBpLnVpLmNvbmZpcm0oICdDb25maXJtIERlbGV0ZScsIGBBcmVcblxuLS0tXG5cbiJ9XSwiZGV0YWlscyI6eyJyZXN1bHRzIjpbeyJjb250ZW50IjoiLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvZ2VuZXJhdGUtbW9kZWxzLnRzXG4vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgc2NyaXB0cy9nZW5lcmF0ZS1tb2RlbHMudHNcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBiYWRsb2dpYy9waS1tb25vIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyJ9LHsiY29udGVudCI6IiMgSW50ZXJhY3RpdmUgd2l0aCBpbml0aWFsIHByb21wdCBwaSAmcXVvdDtMaXN0IGFsbCAudHMgZmlsZXMgaW4gc3JjLyZxdW90OyAjIE5vbi1pbnRlcmFjdGl2ZSBwaSAtcCAmcXVvdDtTdW1tYXJpemUgdGhpcyBjb2RlYmFzZSZxdW90OyAjIERpZmZlcmVudCBtb2RlbCBwaSAtLXByb3ZpZGVyIG9wZW5haSAtLW1vZGVsIGdwdC00byAmcXVvdDtIZWxwIG1lIHJlZmFjdG9yJnF1b3Q7ICMgTW9kZWwgd2l0aCBwcm92aWRlciBwcmVmaXggKG5vIC0tcHJvdmlkZXIgbmVlZGVkKSBwaSAtLW1vZGVsIG9wZW5haS9ncHQtNG8gJnF1b3Q7SGVscCBtZSByZWZhY3RvciZxdW90OyAjIE1vZGVsIHdpdGggdGhpbmtpbmcgbGV2ZWwgc2hvcnRoYW5kIHBpIC0tbW9kZWwgc29ubmV0OmhpZ2ggJnF1b3Q7U29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW0mcXVvdDsgIyBMaW1pdCBtb2RlbCBjeWNsaW5nIHBpIC0tbW9kZWxzICZxdW90O2NsYXVkZS0qLGdwdC00byZxdW90OyAjIFJlYWQtb25seSBtb2RlIHBpIC0tdG9vbHMgcmVhZCxncmVwLGZpbmQsbHMgLXAgJnF1b3Q7UmV2aWV3IHRoZSBjb2RlJnF1b3Q7ICMgSGlnaCB0aGlua2luZyBsZXZlbCBwaSAtLXRoaW5raW5nIGhpZ2ggJnF1b3Q7U29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW0mcXVvdDtcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9SRUFETUUubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG4jIEludGVyYWN0aXZlIHdpdGggaW5pdGlhbCBwcm9tcHQgcGkgXCJMaXN0IGFsbCAudHMgZmlsZXMgaW4gc3JjL1wiICMgTm9uLWludGVyYWN0aXZlIHBpIC1wIFwiU3VtbWFyaXplIHRoaXMgY29kZWJhc2VcIiAjIERpZmZlcmVudCBtb2RlbCBwaSAtLXByb3ZpZGVyIG9wZW5haSAtLW1vZGVsIGdwdC00byBcIkhlbHAgbWUgcmVmYWN0b3JcIiAjIE1vZGVsIHdpdGggcHJvdmlkZXIgcHJlZml4IChubyAtLXByb3ZpZGVyIG5lZWRlZCkgcGkgLS1tb2RlbCBvcGVuYWkvZ3B0LTRvIFwiSGVscCBtZSByZWZhY3RvclwiICMgTW9kZWwgd2l0aCB0aGlua2luZyBsZXZlbCBzaG9ydGhhbmQgcGkgLS1tb2RlbCBzb25uZXQ6aGlnaCBcIlNvbHZlIHRoaXMgY29tcGxleCBwcm9ibGVtXCIgIyBMaW1pdCBtb2RlbCBjeWNsaW5nIHBpIC0tbW9kZWxzIFwiY2xhdWRlLSosZ3B0LTRvXCIgIyBSZWFkLW9ubHkgbW9kZSBwaSAtLXRvb2xzIHJlYWQsZ3JlcCxmaW5kLGxzIC1wIFwiUmV2aWV3IHRoZSBjb2RlXCIgIyBIaWdoIHRoaW5raW5nIGxldmVsIHBpIC0tdGhpbmtpbmcgaGlnaCBcIlNvbHZlIHRoaXMgY29tcGxleCBwcm9ibGVtXCJcbkNvbWJpbmUgLS1uby0qIHdpdGggZXhwbGljaXQgZmxhZ3MgdG8gbG9hZCBleGFjdGx5IHdoYXQgeW91IG5lZWQsIGlnbm9yaW5nIHNldHRpbmdzLmpzb24gKGUuZy4sIC0tbm8tZXh0ZW5zaW9ucyAtZSAuL215LWV4dC50cykuXG5UaGVuIGp1c3QgdGFsayB0byBwaS4gQnkgZGVmYXVsdCwgcGkgZ2l2ZXMgdGhlIG1vZGVsIGZvdXIgdG9vbHM6IHJlYWQsIHdyaXRlLCBlZGl0LCBhbmQgYmFzaC4gVGhlIG1vZGVsIHVzZXMgdGhlc2UgdG8gZnVsZmlsbCB5b3VyIHJlcXVlc3RzLiIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvUkVBRE1FLm1kIn0seyJjb250ZW50IjoibW9kZWw6IE1vZGVsJmx0O1RBcGkmZ3Q7LCBcdGNvbnRleHQ6IENvbnRleHQsIFx0b3B0aW9ucz86IFRPcHRpb25zLCApID0mZ3Q7IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbTsgIMK3IGV4cG9ydCBpbnRlcmZhY2UgVGV4dENvbnRlbnQgeyBcdHR5cGU6ICZxdW90O3RleHQmcXVvdDs7IFx0dGV4dDogc3RyaW5nOyBcdHRleHRTaWduYXR1cmU/OiBzdHJpbmc7IC8vIGUuZy4sIGZvciBPcGVuQUkgcmVzcG9uc2VzLCB0aGUgbWVzc2FnZSBJRCDCtyB9ICDCtyBleHBvcnQgaW50ZXJmYWNlIFRoaW5raW5nQ29udGVudCB7IFx0dHlwZTogJnF1b3Q7dGhpbmtpbmcmcXVvdDs7IFx0dGhpbmtpbmc6IHN0cmluZzsgXHR0aGlua2luZ1NpZ25hdHVyZT86IHN0cmluZzsgLy8gZS5nLiwgZm9yIE9wZW5BSSByZXNwb25zZXMsIHRoZSByZWFzb25pbmcgaXRlbSBJRCDCt1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuLy8gTW9kZWwgaW50ZXJmYWNlIGZvciB0aGUgdW5pZmllZCBtb2RlbCBzeXN0ZW0gwrdcbm1vZGVsOiBNb2RlbDxUQXBpPiwgXHRjb250ZXh0OiBDb250ZXh0LCBcdG9wdGlvbnM/OiBUT3B0aW9ucywgKSA9PiBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW07ICDCtyBleHBvcnQgaW50ZXJmYWNlIFRleHRDb250ZW50IHsgXHR0eXBlOiBcInRleHRcIjsgXHR0ZXh0OiBzdHJpbmc7IFx0dGV4dFNpZ25hdHVyZT86IHN0cmluZzsgLy8gZS5nLiwgZm9yIE9wZW5BSSByZXNwb25zZXMsIHRoZSBtZXNzYWdlIElEIMK3IH0gIMK3IGV4cG9ydCBpbnRlcmZhY2UgVGhpbmtpbmdDb250ZW50IHsgXHR0eXBlOiBcInRoaW5raW5nXCI7IFx0dGhpbmtpbmc6IHN0cmluZzsgXHR0aGlua2luZ1NpZ25hdHVyZT86IHN0cmluZzsgLy8gZS5nLiwgZm9yIE9wZW5BSSByZXNwb25zZXMsIHRoZSByZWFzb25pbmcgaXRlbSBJRCDCtyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy90eXBlcy50cyJ9LHsiY29udGVudCI6IlRoZW4gYm90aCB0dWktcmVuZGVyZXIudHMgYW5kIHRoZSBSUEMgaGFuZGxlciBjYWxsIHRoZXNlIGZ1bmN0aW9ucy4gLi4uIHsmcXVvdDt0eXBlJnF1b3Q7OiAmcXVvdDtjb21tYW5kJnF1b3Q7LCAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtzZXRfdGhpbmtpbmcmcXVvdDssICZxdW90O2FyZ3MmcXVvdDs6IHsmcXVvdDtsZXZlbCZxdW90OzogJnF1b3Q7aGlnaCZxdW90O319IHsmcXVvdDt0eXBlJnF1b3Q7OiAmcXVvdDtjb21tYW5kJnF1b3Q7LCAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtzZXRfbW9kZWwmcXVvdDssICZxdW90O2FyZ3MmcXVvdDs6IHsmcXVvdDtwcm92aWRlciZxdW90OzogJnF1b3Q7YW50aHJvcGljJnF1b3Q7LCAmcXVvdDttb2RlbCZxdW90OzogJnF1b3Q7Y2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0JnF1b3Q7fX0geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O2dldF9tb2RlbHMmcXVvdDt9IHsmcXVvdDt0eXBlJnF1b3Q7OiAmcXVvdDtjb21tYW5kJnF1b3Q7LCAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtnZXRfc3RhdGUmcXVvdDt9IHsmcXVvdDt0eXBlJnF1b3Q7OiAmcXVvdDtjb21tYW5kJnF1b3Q7LCAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtjbGVhciZxdW90O30geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O2V4cG9ydCZxdW90OywgJnF1b3Q7YXJncyZxdW90OzogeyZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy90bXAvc2Vzc2lvbi5odG1sJnF1b3Q7fX0geyZxdW90O3R5cGUmcXVvdDs6ICZxdW90O2NvbW1hbmQmcXVvdDssICZxdW90O25hbWUmcXVvdDs6ICZxdW90O2dldF9zZXNzaW9uJnF1b3Q7fVxuU3VtbWFyeSBSUEMgbW9kZSBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBwcm9tcHQgYW5kIGFib3J0IGNvbW1hbmRzLiBXZSBzaG91bGQgZXhwb3NlIGEgc3Vic2V0IG9mIGludGVyYWN0aXZlIG1vZGUgc2xhc2ggY29tbWFuZHMgaW4gUlBDIG1vZGUsIHBsdXMgcG90ZW50aWFsbHkgUlBDLXNwZWNpZmljIGNvbW1hbmRzLiBDdXJyZW50IEludGVyYWN0aXZlIE1vZGUgQ29tbWFuZHMgQ29tbWFuZCBEZXNjcmlwdGlvbiBSLi4uXG5UaGVuIGJvdGggdHVpLXJlbmRlcmVyLnRzIGFuZCB0aGUgUlBDIGhhbmRsZXIgY2FsbCB0aGVzZSBmdW5jdGlvbnMuIC4uLiB7XCJ0eXBlXCI6IFwiY29tbWFuZFwiLCBcIm5hbWVcIjogXCJzZXRfdGhpbmtpbmdcIiwgXCJhcmdzXCI6IHtcImxldmVsXCI6IFwiaGlnaFwifX0ge1widHlwZVwiOiBcImNvbW1hbmRcIiwgXCJuYW1lXCI6IFwic2V0X21vZGVsXCIsIFwiYXJnc1wiOiB7XCJwcm92aWRlclwiOiBcImFudGhyb3BpY1wiLCBcIm1vZGVsXCI6IFwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0XCJ9fSB7XCJ0eXBlXCI6IFwiY29tbWFuZFwiLCBcIm5hbWVcIjogXCJnZXRfbW9kZWxzXCJ9IHtcInR5cGVcIjogXCJjb21tYW5kXCIsIFwibmFtZVwiOiBcImdldF9zdGF0ZVwifSB7XCJ0eXBlXCI6IFwiY29tbWFuZFwiLCBcIm5hbWVcIjogXCJjbGVhclwifSB7XCJ0eXBlXCI6IFwiY29tbWFuZFwiLCBcIm5hbWVcIjogXCJleHBvcnRcIiwgXCJhcmdzXCI6IHtcInBhdGhcIjogXCIvdG1wL3Nlc3Npb24uaHRtbFwifX0ge1widHlwZVwiOiBcImNvbW1hbmRcIiwgXCJuYW1lXCI6IFwiZ2V0X3Nlc3Npb25cIn1cbntcInR5cGVcIjogXCJjb21tYW5kX3Jlc3VsdFwiLCBcIm5hbWVcIjogXCJnZXRfbW9kZWxzXCIsIFwic3VjY2Vzc1wiOiB0cnVlLCBcImRhdGFcIjogWy4uLl19IHtcInR5cGVcIjogXCJjb21tYW5kX3Jlc3VsdFwiLCBcIm5hbWVcIjogXCJzZXRfdGhpbmtpbmdcIiwgXCJzdWNjZXNzXCI6IHRydWV9IHtcInR5cGVcIjogXCJjb21tYW5kX3Jlc3VsdFwiLCBcIm5hbWVcIjogXCJzZXRfbW9kZWxcIiwgXCJzdWNjZXNzXCI6IGZhbHNlLCBcImVycm9yXCI6IFwiTW9kZWwgbm90IGZvdW5kXCJ9IEV4dHJhY3Qgc2hhcmVkIGNvbW1hbmQgbG9naWMgZnJvbSB0dWktcmVuZGVyZXIudHMgaW50byBzZXBhcmF0ZSBtb2R1bGVzIMK3XG5zcmMvY29tbWFuZHMvdGhpbmtpbmcudHMgLSBzZXRUaGlua2luZ0xldmVsKCksIGdldEF2YWlsYWJsZVRoaW5raW5nTGV2ZWxzKCkgc3JjL2NvbW1hbmRzL21vZGVsLnRzIC0gc2V0TW9kZWwoKSwgZ2V0QXZhaWxhYmxlTW9kZWxzKCkgKHNvbWUgYWxyZWFkeSBleGlzdHMpIHNyYy9jb21tYW5kcy9zZXNzaW9uLnRzIC0gY2xlYXJTZXNzaW9uKCksIGdldFNlc3Npb25JbmZvKCksIGV4cG9ydFNlc3Npb24oKSBUaGVuIGJvdGggdHVpLXJlbmRlcmVyLnRzIGFuZCB0aGUgUlBDIGhhbmRsZXIgY2FsbCB0aGVzZSBmdW5jdGlvbnMuIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoiRXhwb3NlIHNsYXNoIGNvbW1hbmRzIGluIFJQQyBtb2RlIMK3IElzc3VlICM5MSDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9pc3N1ZXMvOTEifSx7ImNvbnRlbnQiOiJBZGQgY3VzdG9tIHByb3ZpZGVycyBhbmQgbW9kZWxzIChPbGxhbWEsIHZMTE0sIExNIFN0dWRpbywgcHJveGllcykgdmlhIH4vLnBpL2FnZW50L21vZGVscy5qc29uLlxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvbW9kZWxzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVGhlIGZpbGUgcmVsb2FkcyBlYWNoIHRpbWUgeW91IG9wZW4gL21vZGVsLiBFZGl0IGR1cmluZyBzZXNzaW9uOyBubyByZXN0YXJ0IG5lZWRlZC4gQVBJIMK3IERlc2NyaXB0aW9uIMK3IG9wZW5haS1jb21wbGV0aW9ucyDCtyBPcGVuQUkgQ2hhdCBDb21wbGV0aW9ucyAobW9zdCBjb21wYXRpYmxlKSBvcGVuYWktcmVzcG9uc2VzIMK3IE9wZW5BSSBSZXNwb25zZXMgQVBJIMK3IGFudGhyb3BpYy1tZXNzYWdlcyDCtyBBbnRocm9waWMgTWVzc2FnZXMgQVBJIMK3IGdvb2dsZS1nZW5lcmF0aXZlLWFpIMK3XG5Hb29nbGUgR2VuZXJhdGl2ZSBBSSDCtyBTZXQgYXBpIGF0IHByb3ZpZGVyIGxldmVsIChkZWZhdWx0IGZvciBhbGwgbW9kZWxzKSBvciBtb2RlbCBsZXZlbCAob3ZlcnJpZGUgcGVyIG1vZGVsKS4gRmllbGQgwrcgRGVzY3JpcHRpb24gwrcgYmFzZVVybCDCtyBBUEkgZW5kcG9pbnQgVVJMIMK3IGFwaSDCtyBBUEkgdHlwZSAoc2VlIGFib3ZlKSBhcGlLZXkgwrcgQVBJIGtleSAoc2VlIHZhbHVlIHJlc29sdXRpb24gYmVsb3cpIGhlYWRlcnMgwrcgQ3VzdG9tIGhlYWRlcnMgKHNlZSB2YWx1ZSByZXNvbHV0aW9uIGJlbG93KSBhdXRoSGVhZGVyIMK3XG5BZGQgY3VzdG9tIHByb3ZpZGVycyBhbmQgbW9kZWxzIChPbGxhbWEsIHZMTE0sIExNIFN0dWRpbywgcHJveGllcykgdmlhIH4vLnBpL2FnZW50L21vZGVscy5qc29uLiIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvbW9kZWxzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL21vZGVscy5tZCJ9LHsiY29udGVudCI6IklmIHRoZSBwcm92aWRlciBleHBvc2VzIG11bHRpcGxlIG1vZGVsIGZhbWlsaWVzIChmb3IgZXhhbXBsZSBHUFQgYW5kIENsYXVkZSksIGFkZCBhdCBsZWFzdCBvbmUgcGFpciBwZXIgZmFtaWx5LiBGb3Igbm9uLXN0YW5kYXJkIGF1dGgsIGNyZWF0ZSB1dGlsaXR5IChlLmcuLCBiZWRyb2NrLXV0aWxzLnRzKSB3aXRoIGNyZWRlbnRpYWwgZGV0ZWN0aW9uLlxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL0FHRU5UUy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbkZvciBjcm9zcy1wcm92aWRlci1oYW5kb2ZmLnRlc3QudHMsIGFkZCBhdCBsZWFzdCBvbmUgcHJvdmlkZXIvbW9kZWwgcGFpci5cbnNyYy9jb3JlL21vZGVsLXJlc29sdmVyLnRzOiBBZGQgZGVmYXVsdCBtb2RlbCBJRCB0byBERUZBVUxUX01PREVMUyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vQUdFTlRTLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL0FHRU5UUy5tZCJ9LHsiY29udGVudCI6ImZ1bmN0aW9uIGJ1aWxkUGFyYW1zKG1vZGVsOiBNb2RlbCZsdDsmcXVvdDtvcGVuYWktY29tcGxldGlvbnMmcXVvdDsmZ3Q7LCBjb250ZXh0OiBDb250ZXh0LCBvcHRpb25zPzogT3BlbkFJQ29tcGxldGlvbnNPcHRpb25zKSB7XG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9haS9zcmMvcHJvdmlkZXJzL29wZW5haS1jb21wbGV0aW9ucy50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKG1vZGVsOiBNb2RlbDxcIm9wZW5haS1jb21wbGV0aW9uc1wiPiwgY29udGV4dDogQ29udGV4dCwgb3B0aW9ucz86IE9wZW5BSUNvbXBsZXRpb25zT3B0aW9ucykge1xuc3VwcG9ydHNSZWFzb25pbmdFZmZvcnQ6IG1vZGVsLmNvbXBhdC5zdXBwb3J0c1JlYXNvbmluZ0VmZm9ydCA/P1xubWF4VG9rZW5zRmllbGQ6IG1vZGVsLmNvbXBhdC5tYXhUb2tlbnNGaWVsZCA/PyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycy9vcGVuYWktY29tcGxldGlvbnMudHMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvc3JjL3Byb3ZpZGVycy9vcGVuYWktY29tcGxldGlvbnMudHMifSx7ImNvbnRlbnQiOiJnb29nbGUudHMgLSBHb29nbGUgR2VuZXJhdGl2ZSBBSSDCtyBhbWF6b24tYmVkcm9jay50cyAtIEFXUyBCZWRyb2NrIMK3IEFsbCBwcm92aWRlcnMgZm9sbG93IHRoZSBzYW1lIHBhdHRlcm46IGltcG9ydCB7IHR5cGUgQXNzaXN0YW50TWVzc2FnZSwgdHlwZSBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0sIHR5cGUgQ29udGV4dCwgdHlwZSBNb2RlbCwgdHlwZSBTaW1wbGVTdHJlYW1PcHRpb25zLCBjYWxjdWxhdGVDb3N0LCBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0sIH0gZnJvbSAmcXVvdDtAbWFyaW96ZWNobmVyL3BpLWFpJnF1b3Q7OyBmdW5jdGlvbiBzdHJlYW1NeVByb3ZpZGVyKCBtb2RlbDogTW9kZWwmbHQ7YW55Jmd0OywgY29udGV4dDogQ29udGV4dCwgb3B0aW9ucz86IFNpbXBsZVN0cmVhbU9wdGlvbnMgKTogQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtIHsgY29uc3Qgc3RyZWFtID0gY3JlYXRlQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtKCk7IChhc3luYyAoKSA9Jmd0OyB7IC8vIEluaXRpYWxpemUgb3V0cHV0IG1lc3NhZ2UgY29uc3Qgb3V0cHV0OiBBc3Npc3RhbnRNZXNzYWdlID0geyByb2xlOiAmcXVvdDthc3Npc3RhbnQmcXVvdDssIGNvbnRlbnQ6IFtdLCBhcFxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuZ29vZ2xlLnRzIC0gR29vZ2xlIEdlbmVyYXRpdmUgQUkgwrcgYW1hem9uLWJlZHJvY2sudHMgLSBBV1MgQmVkcm9jayDCtyBBbGwgcHJvdmlkZXJzIGZvbGxvdyB0aGUgc2FtZSBwYXR0ZXJuOiBpbXBvcnQgeyB0eXBlIEFzc2lzdGFudE1lc3NhZ2UsIHR5cGUgQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtLCB0eXBlIENvbnRleHQsIHR5cGUgTW9kZWwsIHR5cGUgU2ltcGxlU3RyZWFtT3B0aW9ucywgY2FsY3VsYXRlQ29zdCwgY3JlYXRlQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtLCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI7IGZ1bmN0aW9uIHN0cmVhbU15UHJvdmlkZXIoIG1vZGVsOiBNb2RlbDxhbnk+LCBjb250ZXh0OiBDb250ZXh0LCBvcHRpb25zPzogU2ltcGxlU3RyZWFtT3B0aW9ucyApOiBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0geyBjb25zdCBzdHJlYW0gPSBjcmVhdGVBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0oKTsgKGFzeW5jICgpID0+IHsgLy8gSW5pdGlhbGl6ZSBvdXRwdXQgbWVzc2FnZSBjb25zdCBvdXRwdXQ6IEFzc2lzdGFudE1lc3NhZ2UgPSB7IHJvbGU6IFwiYXNzaXN0YW50XCIsIGNvbnRlbnQ6IFtdLCBhcFxuV2hlbiBvbmx5IGJhc2VVcmwgYW5kL29yIGhlYWRlcnMgYXJlIHByb3ZpZGVkIChubyBtb2RlbHMpLCBhbGwgZXhpc3RpbmcgbW9kZWxzIGZvciB0aGF0IHByb3ZpZGVyIGFyZSBwcmVzZXJ2ZWQgd2l0aCB0aGUgbmV3IGVuZHBvaW50LlxuVG8gYWRkIGEgY29tcGxldGVseSBuZXcgcHJvdmlkZXIsIHNwZWNpZnkgbW9kZWxzIGFsb25nIHdpdGggdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24uIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9jdXN0b20tcHJvdmlkZXIubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kIn0seyJjb250ZW50IjoiRXhwYW5kZWQgQ0xJIG1vZGVsIHNlbGVjdGlvbjogLS1tb2RlbCBub3cgc3VwcG9ydHMgcHJvdmlkZXIvaWQsIGZ1enp5IG1hdGNoaW5nLCBhbmQgOiZsdDt0aGlua2luZyZndDsgc3VmZml4ZXMuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuRml4ZWQgZXh0ZW5zaW9uIHNvdXJjZSBwYXJzaW5nIHNvIGRvdC1wcmVmaXhlZCBsb2NhbCBwYXRocyAoZm9yIGV4YW1wbGUgLnBpL2V4dGVuc2lvbnMvZm9vLnRzKSBhcmUgdHJlYXRlZCBhcyBsb2NhbCBwYXRocyBpbnN0ZWFkIG9mIGdpdCBVUkxzXG5BZGRlZCBNaW5pTWF4IE0yLjUgbW9kZWwgZW50cmllcyBmb3IgbWluaW1heCwgbWluaW1heC1jbiwgb3BlbnJvdXRlciwgYW5kIHZlcmNlbC1haS1nYXRld2F5IHByb3ZpZGVycywgcGx1cyBtaW5pbWF4LW0yLjUtZnJlZSBmb3Igb3BlbmNvZGUuXG5FeHBhbmRlZCBDTEkgbW9kZWwgc2VsZWN0aW9uOiAtLW1vZGVsIG5vdyBzdXBwb3J0cyBwcm92aWRlci9pZCwgZnV6enkgbWF0Y2hpbmcsIGFuZCA6PHRoaW5raW5nPiBzdWZmaXhlcy4iLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJSZWxlYXNlcyDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9yZWxlYXNlcyJ9LHsiY29udGVudCI6IiMgSW50ZXJhY3RpdmUgd2l0aCBpbml0aWFsIHByb21wdCBwaSAmcXVvdDtMaXN0IGFsbCAudHMgZmlsZXMgaW4gc3JjLyZxdW90OyAjIE5vbi1pbnRlcmFjdGl2ZSBwaSAtcCAmcXVvdDtTdW1tYXJpemUgdGhpcyBjb2RlYmFzZSZxdW90OyAjIERpZmZlcmVudCBtb2RlbCBwaSAtLXByb3ZpZGVyIG9wZW5haSAtLW1vZGVsIGdwdC00byAmcXVvdDtIZWxwIG1lIHJlZmFjdG9yJnF1b3Q7ICMgTW9kZWwgd2l0aCBwcm92aWRlciBwcmVmaXggKG5vIC0tcHJvdmlkZXIgbmVlZGVkKSBwaSAtLW1vZGVsIG9wZW5haS9ncHQtNG8gJnF1b3Q7SGVscCBtZSByZWZhY3RvciZxdW90OyAjIE1vZGVsIHdpdGggdGhpbmtpbmcgbGV2ZWwgc2hvcnRoYW5kIHBpIC0tbW9kZWwgc29ubmV0OmhpZ2ggJnF1b3Q7U29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW0mcXVvdDsgIyBMaW1pdCBtb2RlbCBjeWNsaW5nIHBpIC0tbW9kZWxzICZxdW90O2NsYXVkZS0qLGdwdC00byZxdW90OyAjIFJlYWQtb25seSBtb2RlIHBpIC0tdG9vbHMgcmVhZCxncmVwLGZpbmQsbHMgLXAgJnF1b3Q7UmV2aWV3IHRoZSBjb2RlJnF1b3Q7ICMgSGlnaCB0aGlua2luZyBsZXZlbCBwaSAtLXRoaW5raW5nIGhpZ2ggJnF1b3Q7U29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW0mcXVvdDtcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbiMgSW50ZXJhY3RpdmUgd2l0aCBpbml0aWFsIHByb21wdCBwaSBcIkxpc3QgYWxsIC50cyBmaWxlcyBpbiBzcmMvXCIgIyBOb24taW50ZXJhY3RpdmUgcGkgLXAgXCJTdW1tYXJpemUgdGhpcyBjb2RlYmFzZVwiICMgRGlmZmVyZW50IG1vZGVsIHBpIC0tcHJvdmlkZXIgb3BlbmFpIC0tbW9kZWwgZ3B0LTRvIFwiSGVscCBtZSByZWZhY3RvclwiICMgTW9kZWwgd2l0aCBwcm92aWRlciBwcmVmaXggKG5vIC0tcHJvdmlkZXIgbmVlZGVkKSBwaSAtLW1vZGVsIG9wZW5haS9ncHQtNG8gXCJIZWxwIG1lIHJlZmFjdG9yXCIgIyBNb2RlbCB3aXRoIHRoaW5raW5nIGxldmVsIHNob3J0aGFuZCBwaSAtLW1vZGVsIHNvbm5ldDpoaWdoIFwiU29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW1cIiAjIExpbWl0IG1vZGVsIGN5Y2xpbmcgcGkgLS1tb2RlbHMgXCJjbGF1ZGUtKixncHQtNG9cIiAjIFJlYWQtb25seSBtb2RlIHBpIC0tdG9vbHMgcmVhZCxncmVwLGZpbmQsbHMgLXAgXCJSZXZpZXcgdGhlIGNvZGVcIiAjIEhpZ2ggdGhpbmtpbmcgbGV2ZWwgcGkgLS10aGlua2luZyBoaWdoIFwiU29sdmUgdGhpcyBjb21wbGV4IHByb2JsZW1cIlxuQ29tYmluZSAtLW5vLSogd2l0aCBleHBsaWNpdCBmbGFncyB0byBsb2FkIGV4YWN0bHkgd2hhdCB5b3UgbmVlZCwgaWdub3Jpbmcgc2V0dGluZ3MuanNvbiAoZS5nLiwgLS1uby1leHRlbnNpb25zIC1lIC4vbXktZXh0LnRzKS5cblRoZW4ganVzdCB0YWxrIHRvIHBpLiBCeSBkZWZhdWx0LCBwaSBnaXZlcyB0aGUgbW9kZWwgZm91ciB0b29sczogcmVhZCwgd3JpdGUsIGVkaXQsIGFuZCBiYXNoLiBUaGUgbW9kZWwgdXNlcyB0aGVzZSB0byBmdWxmaWxsIHlvdXIgcmVxdWVzdHMuIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50In0seyJjb250ZW50IjoiTm90ZTogVGhpcyBsaWJyYXJ5IG9ubHkgaW5jbHVkZXMgbW9kZWxzIHRoYXQgc3VwcG9ydCB0b29sIGNhbGxpbmcgKGZ1bmN0aW9uIGNhbGxpbmcpLCBhcyB0aGlzIGlzIGVzc2VudGlhbCBmb3IgYWdlbnRpYyB3b3JrZmxvd3MuIC4uLiBBbnkgT3BlbkFJLWNvbXBhdGlibGUgQVBJOiBPbGxhbWEsIHZMTE0sIExNIFN0dWRpbywgZXRjLiAuLi4gVHlwZUJveCBleHBvcnRzIGFyZSByZS1leHBvcnRlZCBmcm9tIEBtYXJpb3plY2huZXIvcGktYWk6IFR5cGUsIFN0YXRpYywgYW5kIFRTY2hlbWEuXG5JZiB0aGUgcHJvdmlkZXIgZXhwb3NlcyBtdWx0aXBsZSBtb2RlbCBmYW1pbGllcyAoZm9yIGV4YW1wbGUgR1BUIGFuZCBDbGF1ZGUpLCBhZGQgYXQgbGVhc3Qgb25lIHBhaXIgcGVyIGZhbWlseS4gRm9yIHByb3ZpZGVycyB3aXRoIG5vbi1zdGFuZGFyZCBhdXRoIChBV1MsIEdvb2dsZSBWZXJ0ZXgpLCBjcmVhdGUgYSB1dGlsaXR5IGxpa2UgYmVkcm9jay11dGlscy50cyB3aXRoIGNyZWRlbnRpYWwgZGV0ZWN0aW9uIGhlbHBlcnMuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWkgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5Gb3IgY3Jvc3MtcHJvdmlkZXItaGFuZG9mZi50ZXN0LnRzLCBhZGQgYXQgbGVhc3Qgb25lIHByb3ZpZGVyL21vZGVsIHBhaXIuIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9haSBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3RyZWUvbWFpbi9wYWNrYWdlcy9haSJ9LHsiY29udGVudCI6IlNlZSBleGFtcGxlcy9zZGsvMTAtc2V0dGluZ3MudHMgwrcgQWxsIGRpc2NvdmVyeSBmdW5jdGlvbnMgYWNjZXB0IG9wdGlvbmFsIGN3ZCBhbmQgYWdlbnREaXIgcGFyYW1ldGVycy4gaW1wb3J0IHsgZ2V0TW9kZWwgfSBmcm9tICZxdW90O0BtYXJpb3plY2huZXIvcGktYWkmcXVvdDs7IGltcG9ydCB7IEF1dGhTdG9yYWdlLCBNb2RlbFJlZ2lzdHJ5LCBkaXNjb3ZlckF1dGhTdG9yYWdlLCBkaXNjb3Zlck1vZGVscywgZGlzY292ZXJTa2lsbHMsIGRpc2NvdmVyRXh0ZW5zaW9ucywgZGlzY292ZXJDb250ZXh0RmlsZXMsIGRpc2NvdmVyUHJvbXB0VGVtcGxhdGVzLCBsb2FkU2V0dGluZ3MsIGJ1aWxkU3lzdGVtUHJvbXB0LCBjcmVhdGVFdmVudEJ1cywgfSBmcm9tICZxdW90O0BtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50JnF1b3Q7OyAvLyBBdXRoIGFuZCBNb2RlbHMgY29uc3QgYXV0aFN0b3JhZ2UgPSBkaXNjb3ZlckF1dGhTdG9yYWdlKCk7IC8vIH4vLnBpL2FnZW50L2F1dGguanNvbiBjb25zdCBtb2RlbFJlZ2lzdHJ5ID0gZGlzY292ZXJNb2RlbHMoYXV0aFN0b3JhZ2UpOyAvLyArIH4vLnBpL2FnZW50L21vZGVscy5qc29uIGNvbnN0IGFsbE1vZGVscyA9IG1vZGVsUmVnaXN0cnkuZ2V0XG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9zZGsubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5TZWUgZXhhbXBsZXMvc2RrLzEwLXNldHRpbmdzLnRzIMK3IEFsbCBkaXNjb3ZlcnkgZnVuY3Rpb25zIGFjY2VwdCBvcHRpb25hbCBjd2QgYW5kIGFnZW50RGlyIHBhcmFtZXRlcnMuIGltcG9ydCB7IGdldE1vZGVsIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktYWlcIjsgaW1wb3J0IHsgQXV0aFN0b3JhZ2UsIE1vZGVsUmVnaXN0cnksIGRpc2NvdmVyQXV0aFN0b3JhZ2UsIGRpc2NvdmVyTW9kZWxzLCBkaXNjb3ZlclNraWxscywgZGlzY292ZXJFeHRlbnNpb25zLCBkaXNjb3ZlckNvbnRleHRGaWxlcywgZGlzY292ZXJQcm9tcHRUZW1wbGF0ZXMsIGxvYWRTZXR0aW5ncywgYnVpbGRTeXN0ZW1Qcm9tcHQsIGNyZWF0ZUV2ZW50QnVzLCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiOyAvLyBBdXRoIGFuZCBNb2RlbHMgY29uc3QgYXV0aFN0b3JhZ2UgPSBkaXNjb3ZlckF1dGhTdG9yYWdlKCk7IC8vIH4vLnBpL2FnZW50L2F1dGguanNvbiBjb25zdCBtb2RlbFJlZ2lzdHJ5ID0gZGlzY292ZXJNb2RlbHMoYXV0aFN0b3JhZ2UpOyAvLyArIH4vLnBpL2FnZW50L21vZGVscy5qc29uIGNvbnN0IGFsbE1vZGVscyA9IG1vZGVsUmVnaXN0cnkuZ2V0XG5TZWUgZXhhbXBsZXMvc2RrLzA2LWV4dGVuc2lvbnMudHMgYW5kIGRvY3MvZXh0ZW5zaW9ucy5tZFxuU2VlIGV4YW1wbGVzL3Nkay8xMS1zZXNzaW9ucy50cyBhbmQgZG9jcy9zZXNzaW9uLm1kIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9zZGsubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3Mvc2RrLm1kIn0seyJjb250ZW50IjoiLnBpL2V4dGVuc2lvbnMvKi50cyDCtyBOZXcgc2V0dGluZ3M6IGV4dGVuc2lvbnMgYXJyYXkgKGRlcHJlY2F0ZSBob29rcyBhbmQgY3VzdG9tVG9vbHMpIE5ldyBDTEkgZmxhZzogLS1leHRlbnNpb24gKGRlcHJlY2F0ZSAtLWhvb2sgYW5kIC0tdG9vbCkgQmFja3dhcmQgY29tcGF0aWJpbGl0eTogS2VlcCBkaXNjb3ZlcmluZyBmcm9tIG9sZCBsb2NhdGlvbnMgKGhvb2tzLywgdG9vbHMvKSB3aXRoIGRlcHJlY2F0aW9uIHdhcm5pbmdzIMK3IFJlbW92ZTogb25TZXNzaW9uIGNhbGxiYWNrIGZyb20gdG9vbHMgKHVzZSBwaS5vbigmcXVvdDtzZXNzaW9uX3N0YXJ0JnF1b3Q7KSBldGMuIGluc3RlYWQpIFVwZGF0ZSBkb2NzOiBNZXJnZSBob29rcy5tZCBhbmQgY3VzdG9tLXRvb2xzLm1kIGludG8gZXh0ZW5zaW9ucy5tZCDCtyBTaW5nbGUgbWVudGFsIG1vZGVsIMK3XG5Qcm9ibGVtIEhvb2tzIGFuZCBjdXN0b20gdG9vbHMgYXJlIHR3byBzZXBhcmF0ZSBjb25jZXB0cyB3aXRoIG5lYXJseSBpZGVudGljYWwgbG9hZGVyIGluZnJhc3RydWN0dXJlOiBEdXBsaWNhdGUgZ2V0QWxpYXNlcygpLCBleHBhbmRQYXRoKCksIG5vcm1hbGl6ZVVuaWNvZGVTcGFjZXMoKSBEdXBsaWNhdGUgcGF0aCByZXNvbHV0aW9uIGxvZ2ljIER1cGxpY2F0ZSBkaXNjb3ZlcnkgcGF0dGVybnMgKGRpc2NvdmVyWEkuLi5cbi5waS9leHRlbnNpb25zLyoudHMgwrcgTmV3IHNldHRpbmdzOiBleHRlbnNpb25zIGFycmF5IChkZXByZWNhdGUgaG9va3MgYW5kIGN1c3RvbVRvb2xzKSBOZXcgQ0xJIGZsYWc6IC0tZXh0ZW5zaW9uIChkZXByZWNhdGUgLS1ob29rIGFuZCAtLXRvb2wpIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IEtlZXAgZGlzY292ZXJpbmcgZnJvbSBvbGQgbG9jYXRpb25zIChob29rcy8sIHRvb2xzLykgd2l0aCBkZXByZWNhdGlvbiB3YXJuaW5ncyDCtyBSZW1vdmU6IG9uU2Vzc2lvbiBjYWxsYmFjayBmcm9tIHRvb2xzICh1c2UgcGkub24oXCJzZXNzaW9uX3N0YXJ0XCIpIGV0Yy4gaW5zdGVhZCkgVXBkYXRlIGRvY3M6IE1lcmdlIGhvb2tzLm1kIGFuZCBjdXN0b20tdG9vbHMubWQgaW50byBleHRlbnNpb25zLm1kIMK3IFNpbmdsZSBtZW50YWwgbW9kZWwgwrciLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJNZXJnZSBob29rcyBhbmQgY3VzdG9tIHRvb2xzIGludG8gdW5pZmllZCBleHRlbnNpb25zIMK3IElzc3VlICM0NTQgwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vaXNzdWVzLzQ1NCJ9LHsiY29udGVudCI6Ii0gV2hlbiBhc2tlZCBhYm91dDogZXh0ZW5zaW9ucyAoZG9jcy9leHRlbnNpb25zLm1kLCBleGFtcGxlcy9leHRlbnNpb25zLyksIHRoZW1lcyAoZG9jcy90aGVtZXMubWQpLCBza2lsbHMgKGRvY3Mvc2tpbGxzLm1kKSwgcHJvbXB0IHRlbXBsYXRlcyAoZG9jcy9wcm9tcHQtdGVtcGxhdGVzLm1kKSwgVFVJIGNvbXBvbmVudHMgKGRvY3MvdHVpLm1kKSwga2V5YmluZGluZ3MgKGRvY3Mva2V5YmluZGluZ3MubWQpLCBTREsgaW50ZWdyYXRpb25zIChkb2NzL3Nkay5tZCksIGN1c3RvbSBwcm92aWRlcnMgKGRvY3MvY3VzdG9tLXByb3ZpZGVyLm1kKSwgYWRkaW5nIG1vZGVscyAoZG9jcy9tb2RlbHMubWQpLCBwaSBwYWNrYWdlcyAoZG9jcy9wYWNrYWdlcy5tZClcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9zeXN0ZW0tcHJvbXB0LnRzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuLSBXaGVuIGFza2VkIGFib3V0OiBleHRlbnNpb25zIChkb2NzL2V4dGVuc2lvbnMubWQsIGV4YW1wbGVzL2V4dGVuc2lvbnMvKSwgdGhlbWVzIChkb2NzL3RoZW1lcy5tZCksIHNraWxscyAoZG9jcy9za2lsbHMubWQpLCBwcm9tcHQgdGVtcGxhdGVzIChkb2NzL3Byb21wdC10ZW1wbGF0ZXMubWQpLCBUVUkgY29tcG9uZW50cyAoZG9jcy90dWkubWQpLCBrZXliaW5kaW5ncyAoZG9jcy9rZXliaW5kaW5ncy5tZCksIFNESyBpbnRlZ3JhdGlvbnMgKGRvY3Mvc2RrLm1kKSwgY3VzdG9tIHByb3ZpZGVycyAoZG9jcy9jdXN0b20tcHJvdmlkZXIubWQpLCBhZGRpbmcgbW9kZWxzIChkb2NzL21vZGVscy5tZCksIHBpIHBhY2thZ2VzIChkb2NzL3BhY2thZ2VzLm1kKSIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL3N5c3RlbS1wcm9tcHQudHMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL3N5c3RlbS1wcm9tcHQudHMifSx7ImNvbnRlbnQiOiJBbnRpZ3Jhdml0eTogU2FuZGJveCB3aXRoIEdlbWluaSAzLCBDbGF1ZGUsIGFuZCBHUFQtT1NTIG1vZGVscyDCtyBCb3RoIGZyZWUgd2l0aCBhbnkgR29vZ2xlIGFjY291bnQsIHN1YmplY3QgdG8gcmF0ZSBsaW1pdHMgwrcgRm9yIHBhaWQgQ2xvdWQgQ29kZSBBc3Npc3Q6IHNldCBHT09HTEVfQ0xPVURfUFJPSkVDVCBlbnYgdmFyIC4uLiBSZWZlcmVuY2UgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgYXV0aC5qc29uIGtleXM6IGNvbnN0IGVudk1hcCBpbiBwYWNrYWdlcy9haS9zcmMvZW52LWFwaS1rZXlzLnRzLlxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVmlhIG1vZGVscy5qc29uOiBBZGQgT2xsYW1hLCBMTSBTdHVkaW8sIHZMTE0sIG9yIGFueSBwcm92aWRlciB0aGF0IHNwZWFrcyBhIHN1cHBvcnRlZCBBUEkgKE9wZW5BSSBDb21wbGV0aW9ucywgT3BlbkFJIFJlc3BvbnNlcywgQW50aHJvcGljIE1lc3NhZ2VzLCBHb29nbGUgR2VuZXJhdGl2ZSBBSSkuXG5BbnRpZ3Jhdml0eTogU2FuZGJveCB3aXRoIEdlbWluaSAzLCBDbGF1ZGUsIGFuZCBHUFQtT1NTIG1vZGVscyDCtyBCb3RoIGZyZWUgd2l0aCBhbnkgR29vZ2xlIGFjY291bnQsIHN1YmplY3QgdG8gcmF0ZSBsaW1pdHMgwrcgRm9yIHBhaWQgQ2xvdWQgQ29kZSBBc3Npc3Q6IHNldCBHT09HTEVfQ0xPVURfUFJPSkVDVCBlbnYgdmFyIC4uLiBSZWZlcmVuY2UgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgYXV0aC5qc29uIGtleXM6IGNvbnN0IGVudk1hcCBpbiBwYWNrYWdlcy9haS9zcmMvZW52LWFwaS1rZXlzLnRzLlxuUGkgc3VwcG9ydHMgc3Vic2NyaXB0aW9uLWJhc2VkIHByb3ZpZGVycyB2aWEgT0F1dGggYW5kIEFQSSBrZXkgcHJvdmlkZXJzIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYXV0aCBmaWxlLiBGb3IgZWFjaCBwcm92aWRlciwgcGkga25vd3MgYWxsIGF2YWlsYWJsZSBtb2RlbHMuIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9wcm92aWRlcnMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIn0seyJjb250ZW50IjoiSWYgdGhlIHByb3ZpZGVyIGV4cG9zZXMgbXVsdGlwbGUgbW9kZWwgZmFtaWxpZXMgKGZvciBleGFtcGxlIEdQVCBhbmQgQ2xhdWRlKSwgYWRkIGF0IGxlYXN0IG9uZSBwYWlyIHBlciBmYW1pbHkuIEZvciBwcm92aWRlcnMgd2l0aCBub24tc3RhbmRhcmQgYXV0aCAoQVdTLCBHb29nbGUgVmVydGV4KSwgY3JlYXRlIGEgdXRpbGl0eSBsaWtlIGJlZHJvY2stdXRpbHMudHMgd2l0aCBjcmVkZW50aWFsIGRldGVjdGlvbiBoZWxwZXJzLlxuSWYgdGhlIHByb3ZpZGVyIGV4cG9zZXMgbXVsdGlwbGUgbW9kZWwgZmFtaWxpZXMgKGZvciBleGFtcGxlIEdQVCBhbmQgQ2xhdWRlKSwgYWRkIGF0IGxlYXN0IG9uZSBwYWlyIHBlciBmYW1pbHkuIEZvciBwcm92aWRlcnMgd2l0aCBub24tc3RhbmRhcmQgYXV0aCAoQVdTLCBHb29nbGUgVmVydGV4KSwgY3JlYXRlIGEgdXRpbGl0eSBsaWtlIGJlZHJvY2stdXRpbHMudHMgd2l0aCBjcmVkZW50aWFsIGRldGVjdGlvbiBoZWxwZXJzLlxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2FpL1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbkZvciBjcm9zcy1wcm92aWRlci1oYW5kb2ZmLnRlc3QudHMsIGFkZCBhdCBsZWFzdCBvbmUgcHJvdmlkZXIvbW9kZWwgcGFpci4iLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJwaS1tb25vL3BhY2thZ2VzL2FpL1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9SRUFETUUubWQifSx7ImNvbnRlbnQiOiJOb3RlOiBucG0gcnVuIGNoZWNrIHJlcXVpcmVzIG5wbSBydW4gYnVpbGQgdG8gYmUgcnVuIGZpcnN0LiBUaGUgd2ViLXVpIHBhY2thZ2UgdXNlcyB0c2Mgd2hpY2ggbmVlZHMgY29tcGlsZWQgLmQudHMgZmlsZXMgZnJvbSBkZXBlbmRlbmNpZXMuXG5Ob3RlOiBucG0gcnVuIGNoZWNrIHJlcXVpcmVzIG5wbSBydW4gYnVpbGQgdG8gYmUgcnVuIGZpcnN0LiBUaGUgd2ViLXVpIHBhY2thZ2UgdXNlcyB0c2Mgd2hpY2ggbmVlZHMgY29tcGlsZWQgLmQudHMgZmlsZXMgZnJvbSBkZXBlbmRlbmNpZXMuIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoiR2l0SHViIC0gYmFkbG9naWMvcGktbW9ubzogQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8ifSx7ImNvbnRlbnQiOiJpbnRlcmZhY2UgQWdlbnRTdGF0ZSB7IHN5c3RlbVByb21wdDogc3RyaW5nOyBtb2RlbDogTW9kZWwmbHQ7YW55Jmd0OzsgdGhpbmtpbmdMZXZlbDogVGhpbmtpbmdMZXZlbDsgdG9vbHM6IEFnZW50VG9vbCZsdDthbnkmZ3Q7W107IG1lc3NhZ2VzOiBBZ2VudE1lc3NhZ2VbXTsgaXNTdHJlYW1pbmc6IGJvb2xlYW47IHN0cmVhbU1lc3NhZ2U6IEFnZW50TWVzc2FnZSB8IG51bGw7IC8vIEN1cnJlbnQgcGFydGlhbCBkdXJpbmcgc3RyZWFtaW5nIHBlbmRpbmdUb29sQ2FsbHM6IFNldCZsdDtzdHJpbmcmZ3Q7OyBlcnJvcj86IHN0cmluZzsgfVxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWdlbnQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWFnZW50LWNvcmVcIjsgaW1wb3J0IHsgZ2V0TW9kZWwgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1haVwiOyBjb25zdCBhZ2VudCA9IG5ldyBBZ2VudCh7IGluaXRpYWxTdGF0ZTogeyBzeXN0ZW1Qcm9tcHQ6IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlwiLCBtb2RlbDogZ2V0TW9kZWwoXCJhbnRocm9waWNcIiwgXCJjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRcIiksIH0sIH0pOyBhZ2VudC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7IGlmIChldmVudC50eXBlID09PSBcIm1lc3NhZ2VfdXBkYXRlXCIgJiYgZXZlbnQuYXNzaXN0YW50TWVzc2FnZUV2ZW50LnR5cGUgPT09IFwidGV4dF9kZWx0YVwiKSB7IC8vIFN0cmVhbSBqdXN0IHRoZSBuZXcgdGV4dCBjaHVuayBwcm9jZXNzLnN0ZG91dC53cml0ZShldmVudC5hc3Npc3RhbnRNZXNzYWdlRXZlbnQuZGVsdGEpOyB9IH0pOyBhd2FpdCBhZ2VudC5wcm9tcHQoXCJIZWxsbyFcIik7XG5jb25zdCBhZ2VudCA9IG5ldyBBZ2VudCh7IC8vIEluaXRpYWwgc3RhdGUgaW5pdGlhbFN0YXRlOiB7IHN5c3RlbVByb21wdDogc3RyaW5nLCBtb2RlbDogTW9kZWw8YW55PiwgdGhpbmtpbmdMZXZlbDogXCJvZmZcIiB8IFwibWluaW1hbFwiIHwgXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIiB8IFwieGhpZ2hcIiwgdG9vbHM6IEFnZW50VG9vbDxhbnk+W10sIG1lc3NhZ2VzOiBBZ2VudE1lc3NhZ2VbXSwgfSwgLy8gQ29udmVydCBBZ2VudE1lc3NhZ2VbXSB0byBMTE0gTWVzc2FnZVtdIChyZXF1aXJlZCBmb3IgY3VzdG9tIG1lc3NhZ2UgdHlwZXMpIGNvbnZlcnRUb0xsbTogKG1lc3NhZ2VzKSA9PiBtZXNzYWdlcy5maWx0ZXIoLi4uKSwgLy8gVHJhbnNmb3JtIGNvbnRleHQgYmVmb3JlIGNvbnZlcnRUb0xsbSAoZm9yIHBydW5pbmcsIGNvbXBhY3Rpb24pIHRyYW5zZm9ybUNvbnRleHQ6IGFzeW5jIChtZXNzYWdlcywgc2lnbmFsKSA9PiBwcnVuZU9sZE1lc3NhZ2VzKG1lc3NhZ2VzKSwgLy8gU3RlZXJpbmcgbW9kZTogXCJvbmUtYXQtYS10aW1lXCIgKGRlZmF1bHQpIG9yIFwiYWxsXCIgc3RlZXJpbmdNb2RlOiBcIm9uZS1hdC1hLXRpbWVcIiwgLy8gRm9sbG93LXVwIG1vZGU6IFwiXG5pbnRlcmZhY2UgQWdlbnRTdGF0ZSB7IHN5c3RlbVByb21wdDogc3RyaW5nOyBtb2RlbDogTW9kZWw8YW55PjsgdGhpbmtpbmdMZXZlbDogVGhpbmtpbmdMZXZlbDsgdG9vbHM6IEFnZW50VG9vbDxhbnk+W107IG1lc3NhZ2VzOiBBZ2VudE1lc3NhZ2VbXTsgaXNTdHJlYW1pbmc6IGJvb2xlYW47IHN0cmVhbU1lc3NhZ2U6IEFnZW50TWVzc2FnZSB8IG51bGw7IC8vIEN1cnJlbnQgcGFydGlhbCBkdXJpbmcgc3RyZWFtaW5nIHBlbmRpbmdUb29sQ2FsbHM6IFNldDxzdHJpbmc+OyBlcnJvcj86IHN0cmluZzsgfSIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvYWdlbnQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvYWdlbnQifSx7ImNvbnRlbnQiOiJHZW5lcmF0ZSBpbWFnZXMgdmlhIEdvb2dsZSBBbnRpZ3Jhdml0eSB3aXRoIG9wdGlvbmFsIHNhdmUtdG8tZGlzayBtb2RlcyDCtyBzc2gudHMgwrcgRGVsZWdhdGUgYWxsIHRvb2xzIHRvIGEgcmVtb3RlIG1hY2hpbmUgdmlhIFNTSCB1c2luZyBwbHVnZ2FibGUgb3BlcmF0aW9ucyDCtyBzdWJhZ2VudC8gRGVsZWdhdGUgdGFza3MgdG8gc3BlY2lhbGl6ZWQgc3ViYWdlbnRzIHdpdGggaXNvbGF0ZWQgY29udGV4dCB3aW5kb3dzIMK3IEV4dGVuc2lvbiDCtyBEZXNjcmlwdGlvbiDCtyBwcmVzZXQudHMgwrcgTmFtZWQgcHJlc2V0cyBmb3IgbW9kZWwsIHRoaW5raW5nIGxldmVsLCB0b29scywgYW5kIGluc3RydWN0aW9ucyB2aWEgLS1wcmVzZXQgZmxhZyBhbmQgL3ByZXNldCBjb21tYW5kIMK3XG5HZW5lcmF0ZSBpbWFnZXMgdmlhIEdvb2dsZSBBbnRpZ3Jhdml0eSB3aXRoIG9wdGlvbmFsIHNhdmUtdG8tZGlzayBtb2RlcyDCtyBzc2gudHMgwrcgRGVsZWdhdGUgYWxsIHRvb2xzIHRvIGEgcmVtb3RlIG1hY2hpbmUgdmlhIFNTSCB1c2luZyBwbHVnZ2FibGUgb3BlcmF0aW9ucyDCtyBzdWJhZ2VudC8gRGVsZWdhdGUgdGFza3MgdG8gc3BlY2lhbGl6ZWQgc3ViYWdlbnRzIHdpdGggaXNvbGF0ZWQgY29udGV4dCB3aW5kb3dzIMK3IEV4dGVuc2lvbiDCtyBEZXNjcmlwdGlvbiDCtyBwcmVzZXQudHMgwrcgTmFtZWQgcHJlc2V0cyBmb3IgbW9kZWwsIHRoaW5raW5nIGxldmVsLCB0b29scywgYW5kIGluc3RydWN0aW9ucyB2aWEgLS1wcmVzZXQgZmxhZyBhbmQgL3ByZXNldCBjb21tYW5kIMK3XG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXMvZXh0ZW5zaW9ucyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbiMgTG9hZCBhbiBleHRlbnNpb24gd2l0aCAtLWV4dGVuc2lvbiBmbGFnIHBpIC0tZXh0ZW5zaW9uIGV4YW1wbGVzL2V4dGVuc2lvbnMvcGVybWlzc2lvbi1nYXRlLnRzICMgT3IgY29weSB0byBleHRlbnNpb25zIGRpcmVjdG9yeSBmb3IgYXV0by1kaXNjb3ZlcnkgY3AgcGVybWlzc2lvbi1nYXRlLnRzIH4vLnBpL2FnZW50L2V4dGVuc2lvbnMvIC4uLiBOYW1lZCBwcmVzZXRzIGZvciBtb2RlbCwgdGhpbmtpbmcgbGV2ZWwsIHRvb2xzLCBhbmQgaW5zdHJ1Y3Rpb25zIHZpYSAtLXByZXNldCBmbGFnIGFuZCAvcHJlc2V0IGNvbW1hbmRcbmltcG9ydCB0eXBlIHsgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI7IGltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQHNpbmNsYWlyL3R5cGVib3hcIjsgZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBpOiBFeHRlbnNpb25BUEkpIHsgLy8gU3Vic2NyaWJlIHRvIGxpZmVjeWNsZSBldmVudHMgcGkub24oXCJ0b29sX2NhbGxcIiwgYXN5bmMgKGV2ZW50LCBjdHgpID0+IHsgaWYgKGV2ZW50LnRvb2xOYW1lID09PSBcImJhc2hcIiAmJiBldmVudC5pbnB1dC5jb21tYW5kPy5pbmNsdWRlcyhcInJtIC1yZlwiKSkgeyBjb25zdCBvayA9IGF3YWl0IGN0eC51aS5jb25maXJtKFwiRGFuZ2Vyb3VzIVwiLCBcIkFsbG93IHJtIC1yZj9cIik7IGlmICghb2spIHJldHVybiB7IGJsb2NrOiB0cnVlLCByZWFzb246IFwiQmxvY2tlZCBieSB1c2VyXCIgfTsgfSB9KTsgLy8gUmVnaXN0ZXIgY3VzdG9tIHRvb2xzIHBpLnJlZ2lzdGVyVG9vbCh7IG5hbWU6IFwiZ3JlZXRcIiwgbGFiZWw6IFwiR3JlZXRpbmdcIiwgZGVzY3JpcHRpb246IFwiR2VuZXJhdGUgYSBncmVldGluZ1wiLCBwYXJhbWV0ZXJzOiBUeXBlLk9iamVjdCh7IG5hbWU6IFR5cGUuU3RyaW5nKHsgZGVzY3IiLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vdHJlZS9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zIn0seyJjb250ZW50IjoicGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2N1c3RvbS10b29scy8g4pSc4pSA4pSAIHR5cGVzLnRzICMgQ3VzdG9tVG9vbEZhY3RvcnksIFRvb2xBUEksIFRvb2xSZW5kZXJBUEksIEN1c3RvbUFnZW50VG9vbCDilJzilIDilIAgbG9hZGVyLnRzICMgTG9hZCBhbmQgZGlzY292ZXIgY3VzdG9tIHRvb2xzIOKUnOKUgOKUgCByZW5kZXItaGVscGVycy50cyAjIEltcGxlbWVudGF0aW9uIG9mIFRvb2xSZW5kZXJBUEkgaGVscGVycyDilJTilIDilIAgaW5kZXgudHMgIyBFeHBvcnRzXG5WaWJlIHNsb3BwZWQgdGhpcyBmcm9tIG15IHBob25lIGluIGEgaG90ZWwgd2l0aCBtb20sIGp1c3QgZ2l2ZXMgdGhlIGRpcmVjdGlvbiBJIHdhbnQgdG8gZ28gdG93YXJkcywgbm90IGZpbmFsIGRlc2lnbi4gQ3VzdG9tIFRvb2xzIFByb3Bvc2FsIFRoaXMgZG9jdW1lbnQgcHJvcG9zZXMgYSBtZWNoYW5pc20gZm9yIHVzZXJzIHRvIGFkZCBjdXN0b20gdG9vbHMgdG8gY29kaW5nLWFnZW50LCBzaW1pbGFyIHRvIHRoZSAuLi5cbnBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9jdXN0b20tdG9vbHMvIOKUnOKUgOKUgCB0eXBlcy50cyAjIEN1c3RvbVRvb2xGYWN0b3J5LCBUb29sQVBJLCBUb29sUmVuZGVyQVBJLCBDdXN0b21BZ2VudFRvb2wg4pSc4pSA4pSAIGxvYWRlci50cyAjIExvYWQgYW5kIGRpc2NvdmVyIGN1c3RvbSB0b29scyDilJzilIDilIAgcmVuZGVyLWhlbHBlcnMudHMgIyBJbXBsZW1lbnRhdGlvbiBvZiBUb29sUmVuZGVyQVBJIGhlbHBlcnMg4pSU4pSA4pSAIGluZGV4LnRzICMgRXhwb3J0c1xuLy8gfi8ucGkvYWdlbnQvdG9vbHMvaHR0cC50cyBpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQHNpbmNsYWlyL3R5cGVib3gnOyBpbXBvcnQgdHlwZSB7IEN1c3RvbVRvb2xGYWN0b3J5IH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnQnOyBjb25zdCBmYWN0b3J5OiBDdXN0b21Ub29sRmFjdG9yeSA9IChhcGkpID0+IHsgcmV0dXJuIHsgbmFtZTogJ2h0dHAnLCBsYWJlbDogJ0hUVFAgUmVxdWVzdCcsIGRlc2NyaXB0aW9uOiAnTWFrZSBhbiBIVFRQIHJlcXVlc3QgYW5kIHJldHVybiB0aGUgcmVzcG9uc2UnLCBwYXJhbWV0ZXJzOiBUeXBlLk9iamVjdCh7IHVybDogVHlwZS5TdHJpbmcoeyBkZXNjcmlwdGlvbjogJ1VSTCB0byByZXF1ZXN0JyB9KSwgbWV0aG9kOiBUeXBlLk9wdGlvbmFsKFR5cGUuU3RyaW5nKHsgZGVzY3JpcHRpb246ICdIVFRQIG1ldGhvZCAoR0VULCBQT1NULCBldGMuKScgfSkpIH0pLCBleGVjdXRlOiBhc3luYyAodG9vbENhbGxJZCwgcGFyYW1zKSA9PiB7IGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocGFyYW1zLnVybCwgeyBtZXRob2Q6IHBhcmFtcy5tZXRob2QgfHwgJ0dFVCcgfSk7IGNvbnN0IHRleHQgPSBhd2FpXG4vLyB+Ly5waS9hZ2VudC90b29scy9kZWxldGUtZmlsZS50cyBpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQHNpbmNsYWlyL3R5cGVib3gnOyBpbXBvcnQgeyB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJzsgaW1wb3J0IHR5cGUgeyBDdXN0b21Ub29sRmFjdG9yeSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50JzsgY29uc3QgZmFjdG9yeTogQ3VzdG9tVG9vbEZhY3RvcnkgPSAoYXBpKSA9PiB7IHJldHVybiB7IG5hbWU6ICdkZWxldGUtZmlsZScsIGxhYmVsOiAnRGVsZXRlIEZpbGUnLCBkZXNjcmlwdGlvbjogJ0RlbGV0ZSBhIGZpbGUgd2l0aCBjb25maXJtYXRpb24gcHJvbXB0JywgcGFyYW1ldGVyczogVHlwZS5PYmplY3QoeyBwYXRoOiBUeXBlLlN0cmluZyh7IGRlc2NyaXB0aW9uOiAnUGF0aCB0byBmaWxlIHRvIGRlbGV0ZScgfSkgfSksIGV4ZWN1dGU6IGFzeW5jICh0b29sQ2FsbElkLCBwYXJhbXMpID0+IHsgLy8gQXNrIGZvciBjb25maXJtYXRpb24gaWYgVUkgaXMgYXZhaWxhYmxlIGlmIChhcGkuaGFzVUkpIHsgY29uc3QgY29uZmlybWVkID0gYXdhaXQgYXBpLnVpLmNvbmZpcm0oICdDb25maXJtIERlbGV0ZScsIGBBcmUiLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJDdXN0b20gdG9vbHMgwrcgSXNzdWUgIzE5MCDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9pc3N1ZXMvMTkwIn1dLCJxdWVyeSI6InNpdGU6Z2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vIG1vZGVscy5nZW5lcmF0ZWQudHMgTU9ERUxTIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDcyNzU5MzAsImVuZGVkQXQiOjE3NzEzNDcyNzY2MzEsImR1cmF0aW9uTXMiOjcwMX19fX0sImVuZGVkQXQiOjE3NzEzNDcyNzY2MzIsImR1cmF0aW9uTXMiOjcwMH0seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMTZKRHp2NWtSYlNteTZhNjYxaUI3d0UiLCJ0b29sTmFtZSI6Imxpbmt1cF93ZWJfZmV0Y2giLCJhcmdzIjp7InVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyIsInJlbmRlckpzIjpmYWxzZX0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDcyNzkxNTUsInBhcnRpYWxSZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiRmV0Y2hpbmcgaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzLi4uIn1dLCJkZXRhaWxzIjp7fX0sInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuW1NraXAgdG8gY29udGVudF0oI3N0YXJ0LW9mLWNvbnRlbnQpXG5cbllvdSBzaWduZWQgaW4gd2l0aCBhbm90aGVyIHRhYiBvciB3aW5kb3cuIFtSZWxvYWRdKCkgdG8gcmVmcmVzaCB5b3VyIHNlc3Npb24uIFlvdSBzaWduZWQgb3V0IGluIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gWW91IHN3aXRjaGVkIGFjY291bnRzIG9uIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gRGlzbWlzcyBhbGVydFxuXG5bYmFkbG9naWNdKC9iYWRsb2dpYykgLyAqKltwaS1tb25vXSgvYmFkbG9naWMvcGktbW9ubykqKiBQdWJsaWNcblxuLSAgIFtOb3RpZmljYXRpb25zXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubykgWW91IG11c3QgYmUgc2lnbmVkIGluIHRvIGNoYW5nZSBub3RpZmljYXRpb24gc2V0dGluZ3Ncbi0gICBbRm9yayAxLjNrXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubylcbi0gICBbU3RhciAxMy4xa10oL2xvZ2luP3JldHVybl90bz0lMkZiYWRsb2dpYyUyRnBpLW1vbm8pXG4gICAgXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHMgMl0oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsbHMpXG4tICAgW0Rpc2N1c3Npb25zXSgvYmFkbG9naWMvcGktbW9uby9kaXNjdXNzaW9ucylcbi0gICBbQWN0aW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vYWN0aW9ucylcbi0gICBbUHJvamVjdHMgMF0oL2JhZGxvZ2ljL3BpLW1vbm8vcHJvamVjdHMpXG4tICAgW1NlY3VyaXR5IDBdKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbkFkZGl0aW9uYWwgbmF2aWdhdGlvbiBvcHRpb25zXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHNdKC9iYWRsb2dpYy9waS1tb25vL3B1bGxzKVxuLSAgIFtEaXNjdXNzaW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vZGlzY3Vzc2lvbnMpXG4tICAgW0FjdGlvbnNdKC9iYWRsb2dpYy9waS1tb25vL2FjdGlvbnMpXG4tICAgW1Byb2plY3RzXSgvYmFkbG9naWMvcGktbW9uby9wcm9qZWN0cylcbi0gICBbU2VjdXJpdHldKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbiMjIEZvb3RlclxuXG48aHR0cHM6Ly9naXRodWIuY29tPsKpIDIwMjYgR2l0SHViLMKgSW5jLlxuXG4jIyMgRm9vdGVyIG5hdmlnYXRpb25cblxuLSAgIFtUZXJtc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vc2l0ZS1wb2xpY3kvZ2l0aHViLXRlcm1zL2dpdGh1Yi10ZXJtcy1vZi1zZXJ2aWNlKVxuLSAgIFtQcml2YWN5XShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9zaXRlLXBvbGljeS9wcml2YWN5LXBvbGljaWVzL2dpdGh1Yi1wcml2YWN5LXN0YXRlbWVudClcbi0gICBbU2VjdXJpdHldKGh0dHBzOi8vZ2l0aHViLmNvbS9zZWN1cml0eSlcbi0gICBbU3RhdHVzXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tLylcbi0gICBbQ29tbXVuaXR5XShodHRwczovL2dpdGh1Yi5jb21tdW5pdHkvKVxuLSAgIFtEb2NzXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS8pXG4tICAgW0NvbnRhY3RdKGh0dHBzOi8vc3VwcG9ydC5naXRodWIuY29tP3RhZ3M9ZG90Y29tLWZvb3Rlcilcbi0gICBNYW5hZ2UgY29va2llc1xuLSAgIERvIG5vdCBzaGFyZSBteSBwZXJzb25hbCBpbmZvcm1hdGlvblxuXG5Zb3UgY2Fu4oCZdCBwZXJmb3JtIHRoYXQgYWN0aW9uIGF0IHRoaXMgdGltZS4ifV0sImRldGFpbHMiOnsidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzIiwibWFya2Rvd24iOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuW1NraXAgdG8gY29udGVudF0oI3N0YXJ0LW9mLWNvbnRlbnQpXG5cbllvdSBzaWduZWQgaW4gd2l0aCBhbm90aGVyIHRhYiBvciB3aW5kb3cuIFtSZWxvYWRdKCkgdG8gcmVmcmVzaCB5b3VyIHNlc3Npb24uIFlvdSBzaWduZWQgb3V0IGluIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gWW91IHN3aXRjaGVkIGFjY291bnRzIG9uIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gRGlzbWlzcyBhbGVydFxuXG5bYmFkbG9naWNdKC9iYWRsb2dpYykgLyAqKltwaS1tb25vXSgvYmFkbG9naWMvcGktbW9ubykqKiBQdWJsaWNcblxuLSAgIFtOb3RpZmljYXRpb25zXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubykgWW91IG11c3QgYmUgc2lnbmVkIGluIHRvIGNoYW5nZSBub3RpZmljYXRpb24gc2V0dGluZ3Ncbi0gICBbRm9yayAxLjNrXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubylcbi0gICBbU3RhciAxMy4xa10oL2xvZ2luP3JldHVybl90bz0lMkZiYWRsb2dpYyUyRnBpLW1vbm8pXG4gICAgXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHMgMl0oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsbHMpXG4tICAgW0Rpc2N1c3Npb25zXSgvYmFkbG9naWMvcGktbW9uby9kaXNjdXNzaW9ucylcbi0gICBbQWN0aW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vYWN0aW9ucylcbi0gICBbUHJvamVjdHMgMF0oL2JhZGxvZ2ljL3BpLW1vbm8vcHJvamVjdHMpXG4tICAgW1NlY3VyaXR5IDBdKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbkFkZGl0aW9uYWwgbmF2aWdhdGlvbiBvcHRpb25zXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHNdKC9iYWRsb2dpYy9waS1tb25vL3B1bGxzKVxuLSAgIFtEaXNjdXNzaW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vZGlzY3Vzc2lvbnMpXG4tICAgW0FjdGlvbnNdKC9iYWRsb2dpYy9waS1tb25vL2FjdGlvbnMpXG4tICAgW1Byb2plY3RzXSgvYmFkbG9naWMvcGktbW9uby9wcm9qZWN0cylcbi0gICBbU2VjdXJpdHldKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbiMjIEZvb3RlclxuXG48aHR0cHM6Ly9naXRodWIuY29tPsKpIDIwMjYgR2l0SHViLMKgSW5jLlxuXG4jIyMgRm9vdGVyIG5hdmlnYXRpb25cblxuLSAgIFtUZXJtc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vc2l0ZS1wb2xpY3kvZ2l0aHViLXRlcm1zL2dpdGh1Yi10ZXJtcy1vZi1zZXJ2aWNlKVxuLSAgIFtQcml2YWN5XShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9zaXRlLXBvbGljeS9wcml2YWN5LXBvbGljaWVzL2dpdGh1Yi1wcml2YWN5LXN0YXRlbWVudClcbi0gICBbU2VjdXJpdHldKGh0dHBzOi8vZ2l0aHViLmNvbS9zZWN1cml0eSlcbi0gICBbU3RhdHVzXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tLylcbi0gICBbQ29tbXVuaXR5XShodHRwczovL2dpdGh1Yi5jb21tdW5pdHkvKVxuLSAgIFtEb2NzXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS8pXG4tICAgW0NvbnRhY3RdKGh0dHBzOi8vc3VwcG9ydC5naXRodWIuY29tP3RhZ3M9ZG90Y29tLWZvb3Rlcilcbi0gICBNYW5hZ2UgY29va2llc1xuLSAgIERvIG5vdCBzaGFyZSBteSBwZXJzb25hbCBpbmZvcm1hdGlvblxuXG5Zb3UgY2Fu4oCZdCBwZXJmb3JtIHRoYXQgYWN0aW9uIGF0IHRoaXMgdGltZS4iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI3OTE1NCwiZW5kZWRBdCI6MTc3MTM0NzI4MzMxOCwiZHVyYXRpb25NcyI6NDE2NH19fX0sImVuZGVkQXQiOjE3NzEzNDcyODMzMTksImR1cmF0aW9uTXMiOjQxNjR9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFYbUdDMTVmRGVtUFNQQ21ISjk4WFdzIiwidG9vbE5hbWUiOiJnaXRodWJfc2VhcmNoIiwiYXJncyI6eyJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInF1ZXJ5IjoicGF0aDpwYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBleHBvcnQgY29uc3QgTU9ERUxTIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDcyODU3MDgsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIENvZGUgU2VhcmNoIFJlc3VsdHNcblxuKipRdWVyeToqKiBgcGF0aDpwYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBleHBvcnQgY29uc3QgTU9ERUxTYFxuKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbioqVG90YWwgUmVzdWx0czoqKiAwXG5cbl9ObyBjb2RlIG1hdGNoaW5nIHRoZSBxdWVyeSB3YXMgZm91bmQuX1xuIn1dLCJkZXRhaWxzIjp7InF1ZXJ5IjoicGF0aDpwYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBleHBvcnQgY29uc3QgTU9ERUxTIiwicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI4NTcwNywiZW5kZWRBdCI6MTc3MTM0NzI4NjA3NywiZHVyYXRpb25NcyI6MzcwfX19fSwiZW5kZWRBdCI6MTc3MTM0NzI4NjA3NywiZHVyYXRpb25NcyI6MzY5fSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxUEF2anVNOG5iRlRqRFZtdjR6bnNWTCIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy90eXBlcy50cyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3Mjg4MjA5LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyB0eXBlcy50c1xuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2FpL3NyYy90eXBlcy50c2BcbioqU2l6ZToqKiAxMDU4OCBieXRlc1xuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSB9IGZyb20gXCIuL3V0aWxzL2V2ZW50LXN0cmVhbS5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbSB9IGZyb20gXCIuL3V0aWxzL2V2ZW50LXN0cmVhbS5qc1wiO1xuXG5leHBvcnQgdHlwZSBLbm93bkFwaSA9XG5cdHwgXCJvcGVuYWktY29tcGxldGlvbnNcIlxuXHR8IFwib3BlbmFpLXJlc3BvbnNlc1wiXG5cdHwgXCJhenVyZS1vcGVuYWktcmVzcG9uc2VzXCJcblx0fCBcIm9wZW5haS1jb2RleC1yZXNwb25zZXNcIlxuXHR8IFwiYW50aHJvcGljLW1lc3NhZ2VzXCJcblx0fCBcImJlZHJvY2stY29udmVyc2Utc3RyZWFtXCJcblx0fCBcImdvb2dsZS1nZW5lcmF0aXZlLWFpXCJcblx0fCBcImdvb2dsZS1nZW1pbmktY2xpXCJcblx0fCBcImdvb2dsZS12ZXJ0ZXhcIjtcblxuZXhwb3J0IHR5cGUgQXBpID0gS25vd25BcGkgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgdHlwZSBLbm93blByb3ZpZGVyID1cblx0fCBcImFtYXpvbi1iZWRyb2NrXCJcblx0fCBcImFudGhyb3BpY1wiXG5cdHwgXCJnb29nbGVcIlxuXHR8IFwiZ29vZ2xlLWdlbWluaS1jbGlcIlxuXHR8IFwiZ29vZ2xlLWFudGlncmF2aXR5XCJcblx0fCBcImdvb2dsZS12ZXJ0ZXhcIlxuXHR8IFwib3BlbmFpXCJcblx0fCBcImF6dXJlLW9wZW5haS1yZXNwb25zZXNcIlxuXHR8IFwib3BlbmFpLWNvZGV4XCJcblx0fCBcImdpdGh1Yi1jb3BpbG90XCJcblx0fCBcInhhaVwiXG5cdHwgXCJncm9xXCJcblx0fCBcImNlcmVicmFzXCJcblx0fCBcIm9wZW5yb3V0ZXJcIlxuXHR8IFwidmVyY2VsLWFpLWdhdGV3YXlcIlxuXHR8IFwiemFpXCJcblx0fCBcIm1pc3RyYWxcIlxuXHR8IFwibWluaW1heFwiXG5cdHwgXCJtaW5pbWF4LWNuXCJcblx0fCBcImh1Z2dpbmdmYWNlXCJcblx0fCBcIm9wZW5jb2RlXCJcblx0fCBcImtpbWktY29kaW5nXCI7XG5leHBvcnQgdHlwZSBQcm92aWRlciA9IEtub3duUHJvdmlkZXIgfCBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFRoaW5raW5nTGV2ZWwgPSBcIm1pbmltYWxcIiB8IFwibG93XCIgfCBcIm1lZGl1bVwiIHwgXCJoaWdoXCIgfCBcInhoaWdoXCI7XG5cbi8qKiBUb2tlbiBidWRnZXRzIGZvciBlYWNoIHRoaW5raW5nIGxldmVsICh0b2tlbi1iYXNlZCBwcm92aWRlcnMgb25seSkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhpbmtpbmdCdWRnZXRzIHtcblx0bWluaW1hbD86IG51bWJlcjtcblx0bG93PzogbnVtYmVyO1xuXHRtZWRpdW0/OiBudW1iZXI7XG5cdGhpZ2g/OiBudW1iZXI7XG59XG5cbi8vIEJhc2Ugb3B0aW9ucyBhbGwgcHJvdmlkZXJzIHNoYXJlXG5leHBvcnQgdHlwZSBDYWNoZVJldGVudGlvbiA9IFwibm9uZVwiIHwgXCJzaG9ydFwiIHwgXCJsb25nXCI7XG5cbmV4cG9ydCB0eXBlIFRyYW5zcG9ydCA9IFwic3NlXCIgfCBcIndlYnNvY2tldFwiIHwgXCJhdXRvXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtT3B0aW9ucyB7XG5cdHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuXHRtYXhUb2tlbnM/OiBudW1iZXI7XG5cdHNpZ25hbD86IEFib3J0U2lnbmFsO1xuXHRhcGlLZXk/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBQcmVmZXJyZWQgdHJhbnNwb3J0IGZvciBwcm92aWRlcnMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIHRyYW5zcG9ydHMuXG5cdCAqIFByb3ZpZGVycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoaXMgb3B0aW9uIGlnbm9yZSBpdC5cblx0ICovXG5cdHRyYW5zcG9ydD86IFRyYW5zcG9ydDtcblx0LyoqXG5cdCAqIFByb21wdCBjYWNoZSByZXRlbnRpb24gcHJlZmVyZW5jZS4gUHJvdmlkZXJzIG1hcCB0aGlzIHRvIHRoZWlyIHN1cHBvcnRlZCB2YWx1ZXMuXG5cdCAqIERlZmF1bHQ6IFwic2hvcnRcIi5cblx0ICovXG5cdGNhY2hlUmV0ZW50aW9uPzogQ2FjaGVSZXRlbnRpb247XG5cdC8qKlxuXHQgKiBPcHRpb25hbCBzZXNzaW9uIGlkZW50aWZpZXIgZm9yIHByb3ZpZGVycyB0aGF0IHN1cHBvcnQgc2Vzc2lvbi1iYXNlZCBjYWNoaW5nLlxuXHQgKiBQcm92aWRlcnMgY2FuIHVzZSB0aGlzIHRvIGVuYWJsZSBwcm9tcHQgY2FjaGluZywgcmVxdWVzdCByb3V0aW5nLCBvciBvdGhlclxuXHQgKiBzZXNzaW9uLWF3YXJlIGZlYXR1cmVzLiBJZ25vcmVkIGJ5IHByb3ZpZGVycyB0aGF0IGRvbid0IHN1cHBvcnQgaXQuXG5cdCAqL1xuXHRzZXNzaW9uSWQ/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBPcHRpb25hbCBjYWxsYmFjayBmb3IgaW5zcGVjdGluZyBwcm92aWRlciBwYXlsb2FkcyBiZWZvcmUgc2VuZGluZy5cblx0ICovXG5cdG9uUGF5bG9hZD86IChwYXlsb2FkOiB1bmtub3duKSA9PiB2b2lkO1xuXHQvKipcblx0ICogT3B0aW9uYWwgY3VzdG9tIEhUVFAgaGVhZGVycyB0byBpbmNsdWRlIGluIEFQSSByZXF1ZXN0cy5cblx0ICogTWVyZ2VkIHdpdGggcHJvdmlkZXIgZGVmYXVsdHM7IGNhbiBvdmVycmlkZSBkZWZhdWx0IGhlYWRlcnMuXG5cdCAqIE5vdCBzdXBwb3J0ZWQgYnkgYWxsIHByb3ZpZGVycyAoZS5nLiwgQVdTIEJlZHJvY2sgdXNlcyBTREsgYXV0aCkuXG5cdCAqL1xuXHRoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqXG5cdCAqIE1heGltdW0gZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgcmV0cnkgd2hlbiB0aGUgc2VydmVyIHJlcXVlc3RzIGEgbG9uZyB3YWl0LlxuXHQgKiBJZiB0aGUgc2VydmVyJ3MgcmVxdWVzdGVkIGRlbGF5IGV4Y2VlZHMgdGhpcyB2YWx1ZSwgdGhlIHJlcXVlc3QgZmFpbHMgaW1tZWRpYXRlbHlcblx0ICogd2l0aCBhbiBlcnJvciBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZGVsYXksIGFsbG93aW5nIGhpZ2hlci1sZXZlbCByZXRyeSBsb2dpY1xuXHQgKiB0byBoYW5kbGUgaXQgd2l0aCB1c2VyIHZpc2liaWxpdHkuXG5cdCAqIERlZmF1bHQ6IDYwMDAwICg2MCBzZWNvbmRzKS4gU2V0IHRvIDAgdG8gZGlzYWJsZSB0aGUgY2FwLlxuXHQgKi9cblx0bWF4UmV0cnlEZWxheU1zPzogbnVtYmVyO1xuXHQvKipcblx0ICogT3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiBBUEkgcmVxdWVzdHMuXG5cdCAqIFByb3ZpZGVycyBleHRyYWN0IHRoZSBmaWVsZHMgdGhleSB1bmRlcnN0YW5kIGFuZCBpZ25vcmUgdGhlIHJlc3QuXG5cdCAqIEZvciBleGFtcGxlLCBBbnRocm9waWMgdXNlcyBgdXNlcl9pZGAgZm9yIGFidXNlIHRyYWNraW5nIGFuZCByYXRlIGxpbWl0aW5nLlxuXHQgKi9cblx0bWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJTdHJlYW1PcHRpb25zID0gU3RyZWFtT3B0aW9ucyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyBVbmlmaWVkIG9wdGlvbnMgd2l0aCByZWFzb25pbmcgcGFzc2VkIHRvIHN0cmVhbVNpbXBsZSgpIGFuZCBjb21wbGV0ZVNpbXBsZSgpXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVN0cmVhbU9wdGlvbnMgZXh0ZW5kcyBTdHJlYW1PcHRpb25zIHtcblx0cmVhc29uaW5nPzogVGhpbmtpbmdMZXZlbDtcblx0LyoqIEN1c3RvbSB0b2tlbiBidWRnZXRzIGZvciB0aGlua2luZyBsZXZlbHMgKHRva2VuLWJhc2VkIHByb3ZpZGVycyBvbmx5KSAqL1xuXHR0aGlua2luZ0J1ZGdldHM/OiBUaGlua2luZ0J1ZGdldHM7XG59XG5cbi8vIEdlbmVyaWMgU3RyZWFtRnVuY3Rpb24gd2l0aCB0eXBlZCBvcHRpb25zXG5leHBvcnQgdHlwZSBTdHJlYW1GdW5jdGlvbjxUQXBpIGV4dGVuZHMgQXBpID0gQXBpLCBUT3B0aW9ucyBleHRlbmRzIFN0cmVhbU9wdGlvbnMgPSBTdHJlYW1PcHRpb25zPiA9IChcblx0bW9kZWw6IE1vZGVsPFRBcGk+LFxuXHRjb250ZXh0OiBDb250ZXh0LFxuXHRvcHRpb25zPzogVE9wdGlvbnMsXG4pID0+IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0Q29udGVudCB7XG5cdHR5cGU6IFwidGV4dFwiO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRleHRTaWduYXR1cmU/OiBzdHJpbmc7IC8vIGUuZy4sIGZvciBPcGVuQUkgcmVzcG9uc2VzLCB0aGUgbWVzc2FnZSBJRFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRoaW5raW5nQ29udGVudCB7XG5cdHR5cGU6IFwidGhpbmtpbmdcIjtcblx0dGhpbmtpbmc6IHN0cmluZztcblx0dGhpbmtpbmdTaWduYXR1cmU/OiBzdHJpbmc7IC8vIGUuZy4sIGZvciBPcGVuQUkgcmVzcG9uc2VzLCB0aGUgcmVhc29uaW5nIGl0ZW0gSURcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUNvbnRlbnQge1xuXHR0eXBlOiBcImltYWdlXCI7XG5cdGRhdGE6IHN0cmluZzsgLy8gYmFzZTY0IGVuY29kZWQgaW1hZ2UgZGF0YVxuXHRtaW1lVHlwZTogc3RyaW5nOyAvLyBlLmcuLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xDYWxsIHtcblx0dHlwZTogXCJ0b29sQ2FsbFwiO1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFyZ3VtZW50czogUmVjb3JkPHN0cmluZywgYW55Pjtcblx0dGhvdWdodFNpZ25hdHVyZT86IHN0cmluZzsgLy8gR29vZ2xlLXNwZWNpZmljOiBvcGFxdWUgc2lnbmF0dXJlIGZvciByZXVzaW5nIHRob3VnaHQgY29udGV4dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlIHtcblx0aW5wdXQ6IG51bWJlcjtcblx0b3V0cHV0OiBudW1iZXI7XG5cdGNhY2hlUmVhZDogbnVtYmVyO1xuXHRjYWNoZVdyaXRlOiBudW1iZXI7XG5cdHRvdGFsVG9rZW5zOiBudW1iZXI7XG5cdGNvc3Q6IHtcblx0XHRpbnB1dDogbnVtYmVyO1xuXHRcdG91dHB1dDogbnVtYmVyO1xuXHRcdGNhY2hlUmVhZDogbnVtYmVyO1xuXHRcdGNhY2hlV3JpdGU6IG51bWJlcjtcblx0XHR0b3RhbDogbnVtYmVyO1xuXHR9O1xufVxuXG5leHBvcnQgdHlwZSBTdG9wUmVhc29uID0gXCJzdG9wXCIgfCBcImxlbmd0aFwiIHwgXCJ0b29sVXNlXCIgfCBcImVycm9yXCIgfCBcImFib3J0ZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyTWVzc2FnZSB7XG5cdHJvbGU6IFwidXNlclwiO1xuXHRjb250ZW50OiBzdHJpbmcgfCAoVGV4dENvbnRlbnQgfCBJbWFnZUNvbnRlbnQpW107XG5cdHRpbWVzdGFtcDogbnVtYmVyOyAvLyBVbml4IHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RhbnRNZXNzYWdlIHtcblx0cm9sZTogXCJhc3Npc3RhbnRcIjtcblx0Y29udGVudDogKFRleHRDb250ZW50IHwgVGhpbmtpbmdDb250ZW50IHwgVG9vbENhbGwpW107XG5cdGFwaTogQXBpO1xuXHRwcm92aWRlcjogUHJvdmlkZXI7XG5cdG1vZGVsOiBzdHJpbmc7XG5cdHVzYWdlOiBVc2FnZTtcblx0c3RvcFJlYXNvbjogU3RvcFJlYXNvbjtcblx0ZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuXHR0aW1lc3RhbXA6IG51bWJlcjsgLy8gVW5peCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFJlc3VsdE1lc3NhZ2U8VERldGFpbHMgPSBhbnk+IHtcblx0cm9sZTogXCJ0b29sUmVzdWx0XCI7XG5cdHRvb2xDYWxsSWQ6IHN0cmluZztcblx0dG9vbE5hbWU6IHN0cmluZztcblx0Y29udGVudDogKFRleHRDb250ZW50IHwgSW1hZ2VDb250ZW50KVtdOyAvLyBTdXBwb3J0cyB0ZXh0IGFuZCBpbWFnZXNcblx0ZGV0YWlscz86IFREZXRhaWxzO1xuXHRpc0Vycm9yOiBib29sZWFuO1xuXHR0aW1lc3RhbXA6IG51bWJlcjsgLy8gVW5peCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXG59XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSBVc2VyTWVzc2FnZSB8IEFzc2lzdGFudE1lc3NhZ2UgfCBUb29sUmVzdWx0TWVzc2FnZTtcblxuaW1wb3J0IHR5cGUgeyBUU2NoZW1hIH0gZnJvbSBcIkBzaW5jbGFpci90eXBlYm94XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbDxUUGFyYW1ldGVycyBleHRlbmRzIFRTY2hlbWEgPSBUU2NoZW1hPiB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0cGFyYW1ldGVyczogVFBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dCB7XG5cdHN5c3RlbVByb21wdD86IHN0cmluZztcblx0bWVzc2FnZXM6IE1lc3NhZ2VbXTtcblx0dG9vbHM/OiBUb29sW107XG59XG5cbmV4cG9ydCB0eXBlIEFzc2lzdGFudE1lc3NhZ2VFdmVudCA9XG5cdHwgeyB0eXBlOiBcInN0YXJ0XCI7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJ0ZXh0X3N0YXJ0XCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBwYXJ0aWFsOiBBc3Npc3RhbnRNZXNzYWdlIH1cblx0fCB7IHR5cGU6IFwidGV4dF9kZWx0YVwiOyBjb250ZW50SW5kZXg6IG51bWJlcjsgZGVsdGE6IHN0cmluZzsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcInRleHRfZW5kXCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBjb250ZW50OiBzdHJpbmc7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJ0aGlua2luZ19zdGFydFwiOyBjb250ZW50SW5kZXg6IG51bWJlcjsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcInRoaW5raW5nX2RlbHRhXCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBkZWx0YTogc3RyaW5nOyBwYXJ0aWFsOiBBc3Npc3RhbnRNZXNzYWdlIH1cblx0fCB7IHR5cGU6IFwidGhpbmtpbmdfZW5kXCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBjb250ZW50OiBzdHJpbmc7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJ0b29sY2FsbF9zdGFydFwiOyBjb250ZW50SW5kZXg6IG51bWJlcjsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcInRvb2xjYWxsX2RlbHRhXCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBkZWx0YTogc3RyaW5nOyBwYXJ0aWFsOiBBc3Npc3RhbnRNZXNzYWdlIH1cblx0fCB7IHR5cGU6IFwidG9vbGNhbGxfZW5kXCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyB0b29sQ2FsbDogVG9vbENhbGw7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJkb25lXCI7IHJlYXNvbjogRXh0cmFjdDxTdG9wUmVhc29uLCBcInN0b3BcIiB8IFwibGVuZ3RoXCIgfCBcInRvb2xVc2VcIj47IG1lc3NhZ2U6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJlcnJvclwiOyByZWFzb246IEV4dHJhY3Q8U3RvcFJlYXNvbiwgXCJhYm9ydGVkXCIgfCBcImVycm9yXCI+OyBlcnJvcjogQXNzaXN0YW50TWVzc2FnZSB9O1xuXG4vKipcbiAqIENvbXBhdGliaWxpdHkgc2V0dGluZ3MgZm9yIE9wZW5BSS1jb21wYXRpYmxlIGNvbXBsZXRpb25zIEFQSXMuXG4gKiBVc2UgdGhpcyB0byBvdmVycmlkZSBVUkwtYmFzZWQgYXV0by1kZXRlY3Rpb24gZm9yIGN1c3RvbSBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJQ29tcGxldGlvbnNDb21wYXQge1xuXHQvKiogV2hldGhlciB0aGUgcHJvdmlkZXIgc3VwcG9ydHMgdGhlIGBzdG9yZWAgZmllbGQuIERlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQgZnJvbSBVUkwuICovXG5cdHN1cHBvcnRzU3RvcmU/OiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGUgcHJvdmlkZXIgc3VwcG9ydHMgdGhlIGBkZXZlbG9wZXJgIHJvbGUgKHZzIGBzeXN0ZW1gKS4gRGVmYXVsdDogYXV0by1kZXRlY3RlZCBmcm9tIFVSTC4gKi9cblx0c3VwcG9ydHNEZXZlbG9wZXJSb2xlPzogYm9vbGVhbjtcblx0LyoqIFdoZXRoZXIgdGhlIHByb3ZpZGVyIHN1cHBvcnRzIGByZWFzb25pbmdfZWZmb3J0YC4gRGVmYXVsdDogYXV0by1kZXRlY3RlZCBmcm9tIFVSTC4gKi9cblx0c3VwcG9ydHNSZWFzb25pbmdFZmZvcnQ/OiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGUgcHJvdmlkZXIgc3VwcG9ydHMgYHN0cmVhbV9vcHRpb25zOiB7IGluY2x1ZGVfdXNhZ2U6IHRydWUgfWAgZm9yIHRva2VuIHVzYWdlIGluIHN0cmVhbWluZyByZXNwb25zZXMuIERlZmF1bHQ6IHRydWUuICovXG5cdHN1cHBvcnRzVXNhZ2VJblN0cmVhbWluZz86IGJvb2xlYW47XG5cdC8qKiBXaGljaCBmaWVsZCB0byB1c2UgZm9yIG1heCB0b2tlbnMuIERlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQgZnJvbSBVUkwuICovXG5cdG1heFRva2Vuc0ZpZWxkPzogXCJtYXhfY29tcGxldGlvbl90b2tlbnNcIiB8IFwibWF4X3Rva2Vuc1wiO1xuXHQvKiogV2hldGhlciB0b29sIHJlc3VsdHMgcmVxdWlyZSB0aGUgYG5hbWVgIGZpZWxkLiBEZWZhdWx0OiBhdXRvLWRldGVjdGVkIGZyb20gVVJMLiAqL1xuXHRyZXF1aXJlc1Rvb2xSZXN1bHROYW1lPzogYm9vbGVhbjtcblx0LyoqIFdoZXRoZXIgYSB1c2VyIG1lc3NhZ2UgYWZ0ZXIgdG9vbCByZXN1bHRzIHJlcXVpcmVzIGFuIGFzc2lzdGFudCBtZXNzYWdlIGluIGJldHdlZW4uIERlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQgZnJvbSBVUkwuICovXG5cdHJlcXVpcmVzQXNzaXN0YW50QWZ0ZXJUb29sUmVzdWx0PzogYm9vbGVhbjtcblx0LyoqIFdoZXRoZXIgdGhpbmtpbmcgYmxvY2tzIG11c3QgYmUgY29udmVydGVkIHRvIHRleHQgYmxvY2tzIHdpdGggPHRoaW5raW5nPiBkZWxpbWl0ZXJzLiBEZWZhdWx0OiBhdXRvLWRldGVjdGVkIGZyb20gVVJMLiAqL1xuXHRyZXF1aXJlc1RoaW5raW5nQXNUZXh0PzogYm9vbGVhbjtcblx0LyoqIFdoZXRoZXIgdG9vbCBjYWxsIElEcyBtdXN0IGJlIG5vcm1hbGl6ZWQgdG8gTWlzdHJhbCBmb3JtYXQgKGV4YWN0bHkgOSBhbHBoYW51bWVyaWMgY2hhcnMpLiBEZWZhdWx0OiBhdXRvLWRldGVjdGVkIGZyb20gVVJMLiAqL1xuXHRyZXF1aXJlc01pc3RyYWxUb29sSWRzPzogYm9vbGVhbjtcblx0LyoqIEZvcm1hdCBmb3IgcmVhc29uaW5nL3RoaW5raW5nIHBhcmFtZXRlci4gXCJvcGVuYWlcIiB1c2VzIHJlYXNvbmluZ19lZmZvcnQsIFwiemFpXCIgdXNlcyB0aGlua2luZzogeyB0eXBlOiBcImVuYWJsZWRcIiB9LCBcInF3ZW5cIiB1c2VzIGVuYWJsZV90aGlua2luZzogYm9vbGVhbi4gRGVmYXVsdDogXCJvcGVuYWlcIi4gKi9cblx0dGhpbmtpbmdGb3JtYXQ/OiBcIm9wZW5haVwiIHwgXCJ6YWlcIiB8IFwicXdlblwiO1xuXHQvKiogT3BlblJvdXRlci1zcGVjaWZpYyByb3V0aW5nIHByZWZlcmVuY2VzLiBPbmx5IHVzZWQgd2hlbiBiYXNlVXJsIHBvaW50cyB0byBPcGVuUm91dGVyLiAqL1xuXHRvcGVuUm91dGVyUm91dGluZz86IE9wZW5Sb3V0ZXJSb3V0aW5nO1xuXHQvKiogVmVyY2VsIEFJIEdhdGV3YXkgcm91dGluZyBwcmVmZXJlbmNlcy4gT25seSB1c2VkIHdoZW4gYmFzZVVybCBwb2ludHMgdG8gVmVyY2VsIEFJIEdhdGV3YXkuICovXG5cdHZlcmNlbEdhdGV3YXlSb3V0aW5nPzogVmVyY2VsR2F0ZXdheVJvdXRpbmc7XG5cdC8qKiBXaGV0aGVyIHRoZSBwcm92aWRlciBzdXBwb3J0cyB0aGUgYHN0cmljdGAgZmllbGQgaW4gdG9vbCBkZWZpbml0aW9ucy4gRGVmYXVsdDogdHJ1ZS4gKi9cblx0c3VwcG9ydHNTdHJpY3RNb2RlPzogYm9vbGVhbjtcbn1cblxuLyoqIENvbXBhdGliaWxpdHkgc2V0dGluZ3MgZm9yIE9wZW5BSSBSZXNwb25zZXMgQVBJcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJUmVzcG9uc2VzQ29tcGF0IHtcblx0Ly8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Vcbn1cblxuLyoqXG4gKiBPcGVuUm91dGVyIHByb3ZpZGVyIHJvdXRpbmcgcHJlZmVyZW5jZXMuXG4gKiBDb250cm9scyB3aGljaCB1cHN0cmVhbSBwcm92aWRlcnMgT3BlblJvdXRlciByb3V0ZXMgcmVxdWVzdHMgdG8uXG4gKiBAc2VlIGh0dHBzOi8vb3BlbnJvdXRlci5haS9kb2NzL3Byb3ZpZGVyLXJvdXRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuUm91dGVyUm91dGluZyB7XG5cdC8qKiBMaXN0IG9mIHByb3ZpZGVyIHNsdWdzIHRvIGV4Y2x1c2l2ZWx5IHVzZSBmb3IgdGhpcyByZXF1ZXN0IChlLmcuLCBbXCJhbWF6b24tYmVkcm9ja1wiLCBcImFudGhyb3BpY1wiXSkuICovXG5cdG9ubHk/OiBzdHJpbmdbXTtcblx0LyoqIExpc3Qgb2YgcHJvdmlkZXIgc2x1Z3MgdG8gdHJ5IGluIG9yZGVyIChlLmcuLCBbXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIl0pLiAqL1xuXHRvcmRlcj86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFZlcmNlbCBBSSBHYXRld2F5IHJvdXRpbmcgcHJlZmVyZW5jZXMuXG4gKiBDb250cm9scyB3aGljaCB1cHN0cmVhbSBwcm92aWRlcnMgdGhlIGdhdGV3YXkgcm91dGVzIHJlcXVlc3RzIHRvLlxuICogQHNlZSBodHRwczovL3ZlcmNlbC5jb20vZG9jcy9haS1nYXRld2F5L21vZGVscy1hbmQtcHJvdmlkZXJzL3Byb3ZpZGVyLW9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJjZWxHYXRld2F5Um91dGluZyB7XG5cdC8qKiBMaXN0IG9mIHByb3ZpZGVyIHNsdWdzIHRvIGV4Y2x1c2l2ZWx5IHVzZSBmb3IgdGhpcyByZXF1ZXN0IChlLmcuLCBbXCJiZWRyb2NrXCIsIFwiYW50aHJvcGljXCJdKS4gKi9cblx0b25seT86IHN0cmluZ1tdO1xuXHQvKiogTGlzdCBvZiBwcm92aWRlciBzbHVncyB0byB0cnkgaW4gb3JkZXIgKGUuZy4sIFtcImFudGhyb3BpY1wiLCBcIm9wZW5haVwiXSkuICovXG5cdG9yZGVyPzogc3RyaW5nW107XG59XG5cbi8vIE1vZGVsIGludGVyZmFjZSBmb3IgdGhlIHVuaWZpZWQgbW9kZWwgc3lzdGVtXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsPFRBcGkgZXh0ZW5kcyBBcGk+IHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRhcGk6IFRBcGk7XG5cdHByb3ZpZGVyOiBQcm92aWRlcjtcblx0YmFzZVVybDogc3RyaW5nO1xuXHRyZWFzb25pbmc6IGJvb2xlYW47XG5cdGlucHV0OiAoXCJ0ZXh0XCIgfCBcImltYWdlXCIpW107XG5cdGNvc3Q6IHtcblx0XHRpbnB1dDogbnVtYmVyOyAvLyAkL21pbGxpb24gdG9rZW5zXG5cdFx0b3V0cHV0OiBudW1iZXI7IC8vICQvbWlsbGlvbiB0b2tlbnNcblx0XHRjYWNoZVJlYWQ6IG51bWJlcjsgLy8gJC9taWxsaW9uIHRva2Vuc1xuXHRcdGNhY2hlV3JpdGU6IG51bWJlcjsgLy8gJC9taWxsaW9uIHRva2Vuc1xuXHR9O1xuXHRjb250ZXh0V2luZG93OiBudW1iZXI7XG5cdG1heFRva2VuczogbnVtYmVyO1xuXHRoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqIENvbXBhdGliaWxpdHkgb3ZlcnJpZGVzIGZvciBPcGVuQUktY29tcGF0aWJsZSBBUElzLiBJZiBub3Qgc2V0LCBhdXRvLWRldGVjdGVkIGZyb20gYmFzZVVybC4gKi9cblx0Y29tcGF0PzogVEFwaSBleHRlbmRzIFwib3BlbmFpLWNvbXBsZXRpb25zXCJcblx0XHQ/IE9wZW5BSUNvbXBsZXRpb25zQ29tcGF0XG5cdFx0OiBUQXBpIGV4dGVuZHMgXCJvcGVuYWktcmVzcG9uc2VzXCJcblx0XHRcdD8gT3BlbkFJUmVzcG9uc2VzQ29tcGF0XG5cdFx0XHQ6IG5ldmVyO1xufVxuXG5gYGBcbiJ9XSwiZGV0YWlscyI6eyJvd25lciI6ImJhZGxvZ2ljIiwicmVwbyI6InBpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzIiwicmVmIjpudWxsLCJjb250ZW50VHlwZSI6ImZpbGUiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzI4ODIwOSwiZW5kZWRBdCI6MTc3MTM0NzI4ODQ2MywiZHVyYXRpb25NcyI6MjU0fX19fSwiZW5kZWRBdCI6MTc3MTM0NzI4ODQ2MywiZHVyYXRpb25NcyI6MjU0fSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxNmVtdkhxVHZlMlpmRnhXaEFwNUxFdCIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9pbmRleC50cyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3MjkxMTExLCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBpbmRleC50c1xuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2FpL3NyYy9pbmRleC50c2BcbioqU2l6ZToqKiA4NzkgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuZXhwb3J0IHR5cGUgeyBTdGF0aWMsIFRTY2hlbWEgfSBmcm9tIFwiQHNpbmNsYWlyL3R5cGVib3hcIjtcbmV4cG9ydCB7IFR5cGUgfSBmcm9tIFwiQHNpbmNsYWlyL3R5cGVib3hcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vYXBpLXJlZ2lzdHJ5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnYtYXBpLWtleXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGVscy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJzL2FudGhyb3BpYy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJzL2F6dXJlLW9wZW5haS1yZXNwb25zZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9nb29nbGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9nb29nbGUtZ2VtaW5pLWNsaS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJzL2dvb2dsZS12ZXJ0ZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9vcGVuYWktY29tcGxldGlvbnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9vcGVuYWktcmVzcG9uc2VzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlcnMvcmVnaXN0ZXItYnVpbHRpbnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2V2ZW50LXN0cmVhbS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvanNvbi1wYXJzZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvb2F1dGgvaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL292ZXJmbG93LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy90eXBlYm94LWhlbHBlcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRpb24uanNcIjtcblxuYGBgXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9pbmRleC50cyIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJmaWxlIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDcyOTExMTEsImVuZGVkQXQiOjE3NzEzNDcyOTEyODEsImR1cmF0aW9uTXMiOjE3MH19fX0sImVuZGVkQXQiOjE3NzEzNDcyOTEyODEsImR1cmF0aW9uTXMiOjE3MH0seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMUZ0ck12TUE4a0w2UThlZ3lBZTZYaFoiLCJ0b29sTmFtZSI6ImdpdGh1Yl9jb250ZW50IiwiYXJncyI6eyJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haS9SRUFETUUubWQifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzI5NTMyMSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgUkVBRE1FLm1kXG5cbioqUGF0aDoqKiBgcGFja2FnZXMvYWkvUkVBRE1FLm1kYFxuKipTaXplOioqIDQzODE1IGJ5dGVzXG5cbmBgYG1hcmtkb3duXG4jIEBtYXJpb3plY2huZXIvcGktYWlcblxuVW5pZmllZCBMTE0gQVBJIHdpdGggYXV0b21hdGljIG1vZGVsIGRpc2NvdmVyeSwgcHJvdmlkZXIgY29uZmlndXJhdGlvbiwgdG9rZW4gYW5kIGNvc3QgdHJhY2tpbmcsIGFuZCBzaW1wbGUgY29udGV4dCBwZXJzaXN0ZW5jZSBhbmQgaGFuZC1vZmYgdG8gb3RoZXIgbW9kZWxzIG1pZC1zZXNzaW9uLlxuXG4qKk5vdGUqKjogVGhpcyBsaWJyYXJ5IG9ubHkgaW5jbHVkZXMgbW9kZWxzIHRoYXQgc3VwcG9ydCB0b29sIGNhbGxpbmcgKGZ1bmN0aW9uIGNhbGxpbmcpLCBhcyB0aGlzIGlzIGVzc2VudGlhbCBmb3IgYWdlbnRpYyB3b3JrZmxvd3MuXG5cbiMjIFRhYmxlIG9mIENvbnRlbnRzXG5cbi0gW1N1cHBvcnRlZCBQcm92aWRlcnNdKCNzdXBwb3J0ZWQtcHJvdmlkZXJzKVxuLSBbSW5zdGFsbGF0aW9uXSgjaW5zdGFsbGF0aW9uKVxuLSBbUXVpY2sgU3RhcnRdKCNxdWljay1zdGFydClcbi0gW1Rvb2xzXSgjdG9vbHMpXG4gIC0gW0RlZmluaW5nIFRvb2xzXSgjZGVmaW5pbmctdG9vbHMpXG4gIC0gW0hhbmRsaW5nIFRvb2wgQ2FsbHNdKCNoYW5kbGluZy10b29sLWNhbGxzKVxuICAtIFtTdHJlYW1pbmcgVG9vbCBDYWxscyB3aXRoIFBhcnRpYWwgSlNPTl0oI3N0cmVhbWluZy10b29sLWNhbGxzLXdpdGgtcGFydGlhbC1qc29uKVxuICAtIFtWYWxpZGF0aW5nIFRvb2wgQXJndW1lbnRzXSgjdmFsaWRhdGluZy10b29sLWFyZ3VtZW50cylcbiAgLSBbQ29tcGxldGUgRXZlbnQgUmVmZXJlbmNlXSgjY29tcGxldGUtZXZlbnQtcmVmZXJlbmNlKVxuLSBbSW1hZ2UgSW5wdXRdKCNpbWFnZS1pbnB1dClcbi0gW1RoaW5raW5nL1JlYXNvbmluZ10oI3RoaW5raW5ncmVhc29uaW5nKVxuICAtIFtVbmlmaWVkIEludGVyZmFjZV0oI3VuaWZpZWQtaW50ZXJmYWNlLXN0cmVhbXNpbXBsZWNvbXBsZXRlc2ltcGxlKVxuICAtIFtQcm92aWRlci1TcGVjaWZpYyBPcHRpb25zXSgjcHJvdmlkZXItc3BlY2lmaWMtb3B0aW9ucy1zdHJlYW1jb21wbGV0ZSlcbiAgLSBbU3RyZWFtaW5nIFRoaW5raW5nIENvbnRlbnRdKCNzdHJlYW1pbmctdGhpbmtpbmctY29udGVudClcbi0gW1N0b3AgUmVhc29uc10oI3N0b3AtcmVhc29ucylcbi0gW0Vycm9yIEhhbmRsaW5nXSgjZXJyb3ItaGFuZGxpbmcpXG4gIC0gW0Fib3J0aW5nIFJlcXVlc3RzXSgjYWJvcnRpbmctcmVxdWVzdHMpXG4gIC0gW0NvbnRpbnVpbmcgQWZ0ZXIgQWJvcnRdKCNjb250aW51aW5nLWFmdGVyLWFib3J0KVxuLSBbQVBJcywgTW9kZWxzLCBhbmQgUHJvdmlkZXJzXSgjYXBpcy1tb2RlbHMtYW5kLXByb3ZpZGVycylcbiAgLSBbUHJvdmlkZXJzIGFuZCBNb2RlbHNdKCNwcm92aWRlcnMtYW5kLW1vZGVscylcbiAgLSBbUXVlcnlpbmcgUHJvdmlkZXJzIGFuZCBNb2RlbHNdKCNxdWVyeWluZy1wcm92aWRlcnMtYW5kLW1vZGVscylcbiAgLSBbQ3VzdG9tIE1vZGVsc10oI2N1c3RvbS1tb2RlbHMpXG4gIC0gW09wZW5BSSBDb21wYXRpYmlsaXR5IFNldHRpbmdzXSgjb3BlbmFpLWNvbXBhdGliaWxpdHktc2V0dGluZ3MpXG4gIC0gW1R5cGUgU2FmZXR5XSgjdHlwZS1zYWZldHkpXG4tIFtDcm9zcy1Qcm92aWRlciBIYW5kb2Zmc10oI2Nyb3NzLXByb3ZpZGVyLWhhbmRvZmZzKVxuLSBbQ29udGV4dCBTZXJpYWxpemF0aW9uXSgjY29udGV4dC1zZXJpYWxpemF0aW9uKVxuLSBbQnJvd3NlciBVc2FnZV0oI2Jyb3dzZXItdXNhZ2UpXG4gIC0gW0Vudmlyb25tZW50IFZhcmlhYmxlc10oI2Vudmlyb25tZW50LXZhcmlhYmxlcy1ub2RlanMtb25seSlcbiAgLSBbQ2hlY2tpbmcgRW52aXJvbm1lbnQgVmFyaWFibGVzXSgjY2hlY2tpbmctZW52aXJvbm1lbnQtdmFyaWFibGVzKVxuLSBbT0F1dGggUHJvdmlkZXJzXSgjb2F1dGgtcHJvdmlkZXJzKVxuICAtIFtWZXJ0ZXggQUkgKEFEQyldKCN2ZXJ0ZXgtYWktYWRjKVxuICAtIFtDTEkgTG9naW5dKCNjbGktbG9naW4pXG4gIC0gW1Byb2dyYW1tYXRpYyBPQXV0aF0oI3Byb2dyYW1tYXRpYy1vYXV0aClcbiAgLSBbTG9naW4gRmxvdyBFeGFtcGxlXSgjbG9naW4tZmxvdy1leGFtcGxlKVxuICAtIFtVc2luZyBPQXV0aCBUb2tlbnNdKCN1c2luZy1vYXV0aC10b2tlbnMpXG4gIC0gW1Byb3ZpZGVyIE5vdGVzXSgjcHJvdmlkZXItbm90ZXMpXG4tIFtMaWNlbnNlXSgjbGljZW5zZSlcblxuIyMgU3VwcG9ydGVkIFByb3ZpZGVyc1xuXG4tICoqT3BlbkFJKipcbi0gKipBenVyZSBPcGVuQUkgKFJlc3BvbnNlcykqKlxuLSAqKk9wZW5BSSBDb2RleCoqIChDaGF0R1BUIFBsdXMvUHJvIHN1YnNjcmlwdGlvbiwgcmVxdWlyZXMgT0F1dGgsIHNlZSBiZWxvdylcbi0gKipBbnRocm9waWMqKlxuLSAqKkdvb2dsZSoqXG4tICoqVmVydGV4IEFJKiogKEdlbWluaSB2aWEgVmVydGV4IEFJKVxuLSAqKk1pc3RyYWwqKlxuLSAqKkdyb3EqKlxuLSAqKkNlcmVicmFzKipcbi0gKip4QUkqKlxuLSAqKk9wZW5Sb3V0ZXIqKlxuLSAqKlZlcmNlbCBBSSBHYXRld2F5Kipcbi0gKipNaW5pTWF4Kipcbi0gKipHaXRIdWIgQ29waWxvdCoqIChyZXF1aXJlcyBPQXV0aCwgc2VlIGJlbG93KVxuLSAqKkdvb2dsZSBHZW1pbmkgQ0xJKiogKHJlcXVpcmVzIE9BdXRoLCBzZWUgYmVsb3cpXG4tICoqQW50aWdyYXZpdHkqKiAocmVxdWlyZXMgT0F1dGgsIHNlZSBiZWxvdylcbi0gKipBbWF6b24gQmVkcm9jayoqXG4tICoqS2ltaSBGb3IgQ29kaW5nKiogKE1vb25zaG90IEFJLCB1c2VzIEFudGhyb3BpYy1jb21wYXRpYmxlIEFQSSlcbi0gKipBbnkgT3BlbkFJLWNvbXBhdGlibGUgQVBJKio6IE9sbGFtYSwgdkxMTSwgTE0gU3R1ZGlvLCBldGMuXG5cbiMjIEluc3RhbGxhdGlvblxuXG5gYGBiYXNoXG5ucG0gaW5zdGFsbCBAbWFyaW96ZWNobmVyL3BpLWFpXG5gYGBcblxuVHlwZUJveCBleHBvcnRzIGFyZSByZS1leHBvcnRlZCBmcm9tIGBAbWFyaW96ZWNobmVyL3BpLWFpYDogYFR5cGVgLCBgU3RhdGljYCwgYW5kIGBUU2NoZW1hYC5cblxuIyMgUXVpY2sgU3RhcnRcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgVHlwZSwgZ2V0TW9kZWwsIHN0cmVhbSwgY29tcGxldGUsIENvbnRleHQsIFRvb2wsIFN0cmluZ0VudW0gfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gRnVsbHkgdHlwZWQgd2l0aCBhdXRvLWNvbXBsZXRlIHN1cHBvcnQgZm9yIGJvdGggcHJvdmlkZXJzIGFuZCBtb2RlbHNcbmNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ29wZW5haScsICdncHQtNG8tbWluaScpO1xuXG4vLyBEZWZpbmUgdG9vbHMgd2l0aCBUeXBlQm94IHNjaGVtYXMgZm9yIHR5cGUgc2FmZXR5IGFuZCB2YWxpZGF0aW9uXG5jb25zdCB0b29sczogVG9vbFtdID0gW3tcbiAgbmFtZTogJ2dldF90aW1lJyxcbiAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGN1cnJlbnQgdGltZScsXG4gIHBhcmFtZXRlcnM6IFR5cGUuT2JqZWN0KHtcbiAgICB0aW1lem9uZTogVHlwZS5PcHRpb25hbChUeXBlLlN0cmluZyh7IGRlc2NyaXB0aW9uOiAnT3B0aW9uYWwgdGltZXpvbmUgKGUuZy4sIEFtZXJpY2EvTmV3X1lvcmspJyB9KSlcbiAgfSlcbn1dO1xuXG4vLyBCdWlsZCBhIGNvbnZlcnNhdGlvbiBjb250ZXh0IChlYXNpbHkgc2VyaWFsaXphYmxlIGFuZCB0cmFuc2ZlcmFibGUgYmV0d2VlbiBtb2RlbHMpXG5jb25zdCBjb250ZXh0OiBDb250ZXh0ID0ge1xuICBzeXN0ZW1Qcm9tcHQ6ICdZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuJyxcbiAgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ1doYXQgdGltZSBpcyBpdD8nIH1dLFxuICB0b29sc1xufTtcblxuLy8gT3B0aW9uIDE6IFN0cmVhbWluZyB3aXRoIGFsbCBldmVudCB0eXBlc1xuY29uc3QgcyA9IHN0cmVhbShtb2RlbCwgY29udGV4dCk7XG5cbmZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2Ygcykge1xuICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBjb25zb2xlLmxvZyhgU3RhcnRpbmcgd2l0aCAke2V2ZW50LnBhcnRpYWwubW9kZWx9YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0X3N0YXJ0JzpcbiAgICAgIGNvbnNvbGUubG9nKCdcXG5bVGV4dCBzdGFydGVkXScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGV4dF9kZWx0YSc6XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShldmVudC5kZWx0YSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0ZXh0X2VuZCc6XG4gICAgICBjb25zb2xlLmxvZygnXFxuW1RleHQgZW5kZWRdJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0aGlua2luZ19zdGFydCc6XG4gICAgICBjb25zb2xlLmxvZygnW01vZGVsIGlzIHRoaW5raW5nLi4uXScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGhpbmtpbmdfZGVsdGEnOlxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZXZlbnQuZGVsdGEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGhpbmtpbmdfZW5kJzpcbiAgICAgIGNvbnNvbGUubG9nKCdbVGhpbmtpbmcgY29tcGxldGVdJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b29sY2FsbF9zdGFydCc6XG4gICAgICBjb25zb2xlLmxvZyhgXFxuW1Rvb2wgY2FsbCBzdGFydGVkOiBpbmRleCAke2V2ZW50LmNvbnRlbnRJbmRleH1dYCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b29sY2FsbF9kZWx0YSc6XG4gICAgICAvLyBQYXJ0aWFsIHRvb2wgYXJndW1lbnRzIGFyZSBiZWluZyBzdHJlYW1lZFxuICAgICAgY29uc3QgcGFydGlhbENhbGwgPSBldmVudC5wYXJ0aWFsLmNvbnRlbnRbZXZlbnQuY29udGVudEluZGV4XTtcbiAgICAgIGlmIChwYXJ0aWFsQ2FsbC50eXBlID09PSAndG9vbENhbGwnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU3RyZWFtaW5nIGFyZ3MgZm9yICR7cGFydGlhbENhbGwubmFtZX1dYCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b29sY2FsbF9lbmQnOlxuICAgICAgY29uc29sZS5sb2coYFxcblRvb2wgY2FsbGVkOiAke2V2ZW50LnRvb2xDYWxsLm5hbWV9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnRvb2xDYWxsLmFyZ3VtZW50cyl9YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkb25lJzpcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5GaW5pc2hlZDogJHtldmVudC5yZWFzb259YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogJHtldmVudC5lcnJvcn1gKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbi8vIEdldCB0aGUgZmluYWwgbWVzc2FnZSBhZnRlciBzdHJlYW1pbmcsIGFkZCBpdCB0byB0aGUgY29udGV4dFxuY29uc3QgZmluYWxNZXNzYWdlID0gYXdhaXQgcy5yZXN1bHQoKTtcbmNvbnRleHQubWVzc2FnZXMucHVzaChmaW5hbE1lc3NhZ2UpO1xuXG4vLyBIYW5kbGUgdG9vbCBjYWxscyBpZiBhbnlcbmNvbnN0IHRvb2xDYWxscyA9IGZpbmFsTWVzc2FnZS5jb250ZW50LmZpbHRlcihiID0+IGIudHlwZSA9PT0gJ3Rvb2xDYWxsJyk7XG5mb3IgKGNvbnN0IGNhbGwgb2YgdG9vbENhbGxzKSB7XG4gIC8vIEV4ZWN1dGUgdGhlIHRvb2xcbiAgY29uc3QgcmVzdWx0ID0gY2FsbC5uYW1lID09PSAnZ2V0X3RpbWUnXG4gICAgPyBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgdGltZVpvbmU6IGNhbGwuYXJndW1lbnRzLnRpbWV6b25lIHx8ICdVVEMnLFxuICAgICAgICBkYXRlU3R5bGU6ICdmdWxsJyxcbiAgICAgICAgdGltZVN0eWxlOiAnbG9uZydcbiAgICAgIH0pXG4gICAgOiAnVW5rbm93biB0b29sJztcblxuICAvLyBBZGQgdG9vbCByZXN1bHQgdG8gY29udGV4dCAoc3VwcG9ydHMgdGV4dCBhbmQgaW1hZ2VzKVxuICBjb250ZXh0Lm1lc3NhZ2VzLnB1c2goe1xuICAgIHJvbGU6ICd0b29sUmVzdWx0JyxcbiAgICB0b29sQ2FsbElkOiBjYWxsLmlkLFxuICAgIHRvb2xOYW1lOiBjYWxsLm5hbWUsXG4gICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiByZXN1bHQgfV0sXG4gICAgaXNFcnJvcjogZmFsc2UsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gIH0pO1xufVxuXG4vLyBDb250aW51ZSBpZiB0aGVyZSB3ZXJlIHRvb2wgY2FsbHNcbmlmICh0b29sQ2FsbHMubGVuZ3RoID4gMCkge1xuICBjb25zdCBjb250aW51YXRpb24gPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCk7XG4gIGNvbnRleHQubWVzc2FnZXMucHVzaChjb250aW51YXRpb24pO1xuICBjb25zb2xlLmxvZygnQWZ0ZXIgdG9vbCBleGVjdXRpb246JywgY29udGludWF0aW9uLmNvbnRlbnQpO1xufVxuXG5jb25zb2xlLmxvZyhgVG90YWwgdG9rZW5zOiAke2ZpbmFsTWVzc2FnZS51c2FnZS5pbnB1dH0gaW4sICR7ZmluYWxNZXNzYWdlLnVzYWdlLm91dHB1dH0gb3V0YCk7XG5jb25zb2xlLmxvZyhgQ29zdDogJCR7ZmluYWxNZXNzYWdlLnVzYWdlLmNvc3QudG90YWwudG9GaXhlZCg0KX1gKTtcblxuLy8gT3B0aW9uIDI6IEdldCBjb21wbGV0ZSByZXNwb25zZSB3aXRob3V0IHN0cmVhbWluZ1xuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCk7XG5cbmZvciAoY29uc3QgYmxvY2sgb2YgcmVzcG9uc2UuY29udGVudCkge1xuICBpZiAoYmxvY2sudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgY29uc29sZS5sb2coYmxvY2sudGV4dCk7XG4gIH0gZWxzZSBpZiAoYmxvY2sudHlwZSA9PT0gJ3Rvb2xDYWxsJykge1xuICAgIGNvbnNvbGUubG9nKGBUb29sOiAke2Jsb2NrLm5hbWV9KCR7SlNPTi5zdHJpbmdpZnkoYmxvY2suYXJndW1lbnRzKX0pYCk7XG4gIH1cbn1cbmBgYFxuXG4jIyBUb29sc1xuXG5Ub29scyBlbmFibGUgTExNcyB0byBpbnRlcmFjdCB3aXRoIGV4dGVybmFsIHN5c3RlbXMuIFRoaXMgbGlicmFyeSB1c2VzIFR5cGVCb3ggc2NoZW1hcyBmb3IgdHlwZS1zYWZlIHRvb2wgZGVmaW5pdGlvbnMgd2l0aCBhdXRvbWF0aWMgdmFsaWRhdGlvbiB1c2luZyBBSlYuIFR5cGVCb3ggc2NoZW1hcyBjYW4gYmUgc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIGFzIHBsYWluIEpTT04sIG1ha2luZyB0aGVtIGlkZWFsIGZvciBkaXN0cmlidXRlZCBzeXN0ZW1zLlxuXG4jIyMgRGVmaW5pbmcgVG9vbHNcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgVHlwZSwgVG9vbCwgU3RyaW5nRW51bSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBEZWZpbmUgdG9vbCBwYXJhbWV0ZXJzIHdpdGggVHlwZUJveFxuY29uc3Qgd2VhdGhlclRvb2w6IFRvb2wgPSB7XG4gIG5hbWU6ICdnZXRfd2VhdGhlcicsXG4gIGRlc2NyaXB0aW9uOiAnR2V0IGN1cnJlbnQgd2VhdGhlciBmb3IgYSBsb2NhdGlvbicsXG4gIHBhcmFtZXRlcnM6IFR5cGUuT2JqZWN0KHtcbiAgICBsb2NhdGlvbjogVHlwZS5TdHJpbmcoeyBkZXNjcmlwdGlvbjogJ0NpdHkgbmFtZSBvciBjb29yZGluYXRlcycgfSksXG4gICAgdW5pdHM6IFN0cmluZ0VudW0oWydjZWxzaXVzJywgJ2ZhaHJlbmhlaXQnXSwgeyBkZWZhdWx0OiAnY2Vsc2l1cycgfSlcbiAgfSlcbn07XG5cbi8vIE5vdGU6IEZvciBHb29nbGUgQVBJIGNvbXBhdGliaWxpdHksIHVzZSBTdHJpbmdFbnVtIGhlbHBlciBpbnN0ZWFkIG9mIFR5cGUuRW51bVxuLy8gVHlwZS5FbnVtIGdlbmVyYXRlcyBhbnlPZi9jb25zdCBwYXR0ZXJucyB0aGF0IEdvb2dsZSBkb2Vzbid0IHN1cHBvcnRcblxuY29uc3QgYm9va01lZXRpbmdUb29sOiBUb29sID0ge1xuICBuYW1lOiAnYm9va19tZWV0aW5nJyxcbiAgZGVzY3JpcHRpb246ICdTY2hlZHVsZSBhIG1lZXRpbmcnLFxuICBwYXJhbWV0ZXJzOiBUeXBlLk9iamVjdCh7XG4gICAgdGl0bGU6IFR5cGUuU3RyaW5nKHsgbWluTGVuZ3RoOiAxIH0pLFxuICAgIHN0YXJ0VGltZTogVHlwZS5TdHJpbmcoeyBmb3JtYXQ6ICdkYXRlLXRpbWUnIH0pLFxuICAgIGVuZFRpbWU6IFR5cGUuU3RyaW5nKHsgZm9ybWF0OiAnZGF0ZS10aW1lJyB9KSxcbiAgICBhdHRlbmRlZXM6IFR5cGUuQXJyYXkoVHlwZS5TdHJpbmcoeyBmb3JtYXQ6ICdlbWFpbCcgfSksIHsgbWluSXRlbXM6IDEgfSlcbiAgfSlcbn07XG5gYGBcblxuIyMjIEhhbmRsaW5nIFRvb2wgQ2FsbHNcblxuVG9vbCByZXN1bHRzIHVzZSBjb250ZW50IGJsb2NrcyBhbmQgY2FuIGluY2x1ZGUgYm90aCB0ZXh0IGFuZCBpbWFnZXM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcblxuY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ1doYXQgaXMgdGhlIHdlYXRoZXIgaW4gTG9uZG9uPycgfV0sXG4gIHRvb2xzOiBbd2VhdGhlclRvb2xdXG59O1xuXG5jb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCBjb250ZXh0KTtcblxuLy8gQ2hlY2sgZm9yIHRvb2wgY2FsbHMgaW4gdGhlIHJlc3BvbnNlXG5mb3IgKGNvbnN0IGJsb2NrIG9mIHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgaWYgKGJsb2NrLnR5cGUgPT09ICd0b29sQ2FsbCcpIHtcbiAgICAvLyBFeGVjdXRlIHlvdXIgdG9vbCB3aXRoIHRoZSBhcmd1bWVudHNcbiAgICAvLyBTZWUgXCJWYWxpZGF0aW5nIFRvb2wgQXJndW1lbnRzXCIgc2VjdGlvbiBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVXZWF0aGVyQXBpKGJsb2NrLmFyZ3VtZW50cyk7XG5cbiAgICAvLyBBZGQgdG9vbCByZXN1bHQgd2l0aCB0ZXh0IGNvbnRlbnRcbiAgICBjb250ZXh0Lm1lc3NhZ2VzLnB1c2goe1xuICAgICAgcm9sZTogJ3Rvb2xSZXN1bHQnLFxuICAgICAgdG9vbENhbGxJZDogYmxvY2suaWQsXG4gICAgICB0b29sTmFtZTogYmxvY2submFtZSxcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSB9XSxcbiAgICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgfSk7XG4gIH1cbn1cblxuLy8gVG9vbCByZXN1bHRzIGNhbiBhbHNvIGluY2x1ZGUgaW1hZ2VzIChmb3IgdmlzaW9uLWNhcGFibGUgbW9kZWxzKVxuY29uc3QgaW1hZ2VCdWZmZXIgPSByZWFkRmlsZVN5bmMoJ2NoYXJ0LnBuZycpO1xuY29udGV4dC5tZXNzYWdlcy5wdXNoKHtcbiAgcm9sZTogJ3Rvb2xSZXN1bHQnLFxuICB0b29sQ2FsbElkOiAndG9vbF94eXonLFxuICB0b29sTmFtZTogJ2dlbmVyYXRlX2NoYXJ0JyxcbiAgY29udGVudDogW1xuICAgIHsgdHlwZTogJ3RleHQnLCB0ZXh0OiAnR2VuZXJhdGVkIGNoYXJ0IHNob3dpbmcgdGVtcGVyYXR1cmUgdHJlbmRzJyB9LFxuICAgIHsgdHlwZTogJ2ltYWdlJywgZGF0YTogaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpLCBtaW1lVHlwZTogJ2ltYWdlL3BuZycgfVxuICBdLFxuICBpc0Vycm9yOiBmYWxzZSxcbiAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG59KTtcbmBgYFxuXG4jIyMgU3RyZWFtaW5nIFRvb2wgQ2FsbHMgd2l0aCBQYXJ0aWFsIEpTT05cblxuRHVyaW5nIHN0cmVhbWluZywgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcmUgcHJvZ3Jlc3NpdmVseSBwYXJzZWQgYXMgdGhleSBhcnJpdmUuIFRoaXMgZW5hYmxlcyByZWFsLXRpbWUgVUkgdXBkYXRlcyBiZWZvcmUgdGhlIGNvbXBsZXRlIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlOlxuXG5gYGB0eXBlc2NyaXB0XG5jb25zdCBzID0gc3RyZWFtKG1vZGVsLCBjb250ZXh0KTtcblxuZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzKSB7XG4gIGlmIChldmVudC50eXBlID09PSAndG9vbGNhbGxfZGVsdGEnKSB7XG4gICAgY29uc3QgdG9vbENhbGwgPSBldmVudC5wYXJ0aWFsLmNvbnRlbnRbZXZlbnQuY29udGVudEluZGV4XTtcblxuICAgIC8vIHRvb2xDYWxsLmFyZ3VtZW50cyBjb250YWlucyBwYXJ0aWFsbHkgcGFyc2VkIEpTT04gZHVyaW5nIHN0cmVhbWluZ1xuICAgIC8vIFRoaXMgYWxsb3dzIGZvciBwcm9ncmVzc2l2ZSBVSSB1cGRhdGVzXG4gICAgaWYgKHRvb2xDYWxsLnR5cGUgPT09ICd0b29sQ2FsbCcgJiYgdG9vbENhbGwuYXJndW1lbnRzKSB7XG4gICAgICAvLyBCRSBERUZFTlNJVkU6IGFyZ3VtZW50cyBtYXkgYmUgaW5jb21wbGV0ZVxuICAgICAgLy8gRXhhbXBsZTogU2hvdyBmaWxlIHBhdGggYmVpbmcgd3JpdHRlbiBldmVuIGJlZm9yZSBjb250ZW50IGlzIGNvbXBsZXRlXG4gICAgICBpZiAodG9vbENhbGwubmFtZSA9PT0gJ3dyaXRlX2ZpbGUnICYmIHRvb2xDYWxsLmFyZ3VtZW50cy5wYXRoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBXcml0aW5nIHRvOiAke3Rvb2xDYWxsLmFyZ3VtZW50cy5wYXRofWApO1xuXG4gICAgICAgIC8vIENvbnRlbnQgbWlnaHQgYmUgcGFydGlhbCBvciBtaXNzaW5nXG4gICAgICAgIGlmICh0b29sQ2FsbC5hcmd1bWVudHMuY29udGVudCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBDb250ZW50IHByZXZpZXc6ICR7dG9vbENhbGwuYXJndW1lbnRzLmNvbnRlbnQuc3Vic3RyaW5nKDAsIDEwMCl9Li4uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xjYWxsX2VuZCcpIHtcbiAgICAvLyBIZXJlIHRvb2xDYWxsLmFyZ3VtZW50cyBpcyBjb21wbGV0ZSAoYnV0IG5vdCB5ZXQgdmFsaWRhdGVkKVxuICAgIGNvbnN0IHRvb2xDYWxsID0gZXZlbnQudG9vbENhbGw7XG4gICAgY29uc29sZS5sb2coYFRvb2wgY29tcGxldGVkOiAke3Rvb2xDYWxsLm5hbWV9YCwgdG9vbENhbGwuYXJndW1lbnRzKTtcbiAgfVxufVxuYGBgXG5cbioqSW1wb3J0YW50IG5vdGVzIGFib3V0IHBhcnRpYWwgdG9vbCBhcmd1bWVudHM6Kipcbi0gRHVyaW5nIGB0b29sY2FsbF9kZWx0YWAgZXZlbnRzLCBgYXJndW1lbnRzYCBjb250YWlucyB0aGUgYmVzdC1lZmZvcnQgcGFyc2Ugb2YgcGFydGlhbCBKU09OXG4tIEZpZWxkcyBtYXkgYmUgbWlzc2luZyBvciBpbmNvbXBsZXRlIC0gYWx3YXlzIGNoZWNrIGZvciBleGlzdGVuY2UgYmVmb3JlIHVzZVxuLSBTdHJpbmcgdmFsdWVzIG1heSBiZSB0cnVuY2F0ZWQgbWlkLXdvcmRcbi0gQXJyYXlzIG1heSBiZSBpbmNvbXBsZXRlXG4tIE5lc3RlZCBvYmplY3RzIG1heSBiZSBwYXJ0aWFsbHkgcG9wdWxhdGVkXG4tIEF0IG1pbmltdW0sIGBhcmd1bWVudHNgIHdpbGwgYmUgYW4gZW1wdHkgb2JqZWN0IGB7fWAsIG5ldmVyIGB1bmRlZmluZWRgXG4tIFRoZSBHb29nbGUgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydCBmdW5jdGlvbiBjYWxsIHN0cmVhbWluZy4gSW5zdGVhZCwgeW91IHdpbGwgcmVjZWl2ZSBhIHNpbmdsZSBgdG9vbGNhbGxfZGVsdGFgIGV2ZW50IHdpdGggdGhlIGZ1bGwgYXJndW1lbnRzLlxuXG4jIyMgVmFsaWRhdGluZyBUb29sIEFyZ3VtZW50c1xuXG5XaGVuIHVzaW5nIGBhZ2VudExvb3BgLCB0b29sIGFyZ3VtZW50cyBhcmUgYXV0b21hdGljYWxseSB2YWxpZGF0ZWQgYWdhaW5zdCB5b3VyIFR5cGVCb3ggc2NoZW1hcyBiZWZvcmUgZXhlY3V0aW9uLiBJZiB2YWxpZGF0aW9uIGZhaWxzLCB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIG1vZGVsIGFzIGEgdG9vbCByZXN1bHQsIGFsbG93aW5nIGl0IHRvIHJldHJ5LlxuXG5XaGVuIGltcGxlbWVudGluZyB5b3VyIG93biB0b29sIGV4ZWN1dGlvbiBsb29wIHdpdGggYHN0cmVhbSgpYCBvciBgY29tcGxldGUoKWAsIHVzZSBgdmFsaWRhdGVUb29sQ2FsbGAgdG8gdmFsaWRhdGUgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8geW91ciB0b29sczpcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgc3RyZWFtLCB2YWxpZGF0ZVRvb2xDYWxsLCBUb29sIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbmNvbnN0IHRvb2xzOiBUb29sW10gPSBbd2VhdGhlclRvb2wsIGNhbGN1bGF0b3JUb29sXTtcbmNvbnN0IHMgPSBzdHJlYW0obW9kZWwsIHsgbWVzc2FnZXMsIHRvb2xzIH0pO1xuXG5mb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHMpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sY2FsbF9lbmQnKSB7XG4gICAgY29uc3QgdG9vbENhbGwgPSBldmVudC50b29sQ2FsbDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBhcmd1bWVudHMgYWdhaW5zdCB0aGUgdG9vbCdzIHNjaGVtYSAodGhyb3dzIG9uIGludmFsaWQgYXJncylcbiAgICAgIGNvbnN0IHZhbGlkYXRlZEFyZ3MgPSB2YWxpZGF0ZVRvb2xDYWxsKHRvb2xzLCB0b29sQ2FsbCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlTXlUb29sKHRvb2xDYWxsLm5hbWUsIHZhbGlkYXRlZEFyZ3MpO1xuICAgICAgLy8gLi4uIGFkZCB0b29sIHJlc3VsdCB0byBjb250ZXh0XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFZhbGlkYXRpb24gZmFpbGVkIC0gcmV0dXJuIGVycm9yIGFzIHRvb2wgcmVzdWx0IHNvIG1vZGVsIGNhbiByZXRyeVxuICAgICAgY29udGV4dC5tZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgcm9sZTogJ3Rvb2xSZXN1bHQnLFxuICAgICAgICB0b29sQ2FsbElkOiB0b29sQ2FsbC5pZCxcbiAgICAgICAgdG9vbE5hbWU6IHRvb2xDYWxsLm5hbWUsXG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogZXJyb3IubWVzc2FnZSB9XSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbmBgYFxuXG4jIyMgQ29tcGxldGUgRXZlbnQgUmVmZXJlbmNlXG5cbkFsbCBzdHJlYW1pbmcgZXZlbnRzIGVtaXR0ZWQgZHVyaW5nIGFzc2lzdGFudCBtZXNzYWdlIGdlbmVyYXRpb246XG5cbnwgRXZlbnQgVHlwZSB8IERlc2NyaXB0aW9uIHwgS2V5IFByb3BlcnRpZXMgfFxufC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18XG58IGBzdGFydGAgfCBTdHJlYW0gYmVnaW5zIHwgYHBhcnRpYWxgOiBJbml0aWFsIGFzc2lzdGFudCBtZXNzYWdlIHN0cnVjdHVyZSB8XG58IGB0ZXh0X3N0YXJ0YCB8IFRleHQgYmxvY2sgc3RhcnRzIHwgYGNvbnRlbnRJbmRleGA6IFBvc2l0aW9uIGluIGNvbnRlbnQgYXJyYXkgfFxufCBgdGV4dF9kZWx0YWAgfCBUZXh0IGNodW5rIHJlY2VpdmVkIHwgYGRlbHRhYDogTmV3IHRleHQsIGBjb250ZW50SW5kZXhgOiBQb3NpdGlvbiB8XG58IGB0ZXh0X2VuZGAgfCBUZXh0IGJsb2NrIGNvbXBsZXRlIHwgYGNvbnRlbnRgOiBGdWxsIHRleHQsIGBjb250ZW50SW5kZXhgOiBQb3NpdGlvbiB8XG58IGB0aGlua2luZ19zdGFydGAgfCBUaGlua2luZyBibG9jayBzdGFydHMgfCBgY29udGVudEluZGV4YDogUG9zaXRpb24gaW4gY29udGVudCBhcnJheSB8XG58IGB0aGlua2luZ19kZWx0YWAgfCBUaGlua2luZyBjaHVuayByZWNlaXZlZCB8IGBkZWx0YWA6IE5ldyB0ZXh0LCBgY29udGVudEluZGV4YDogUG9zaXRpb24gfFxufCBgdGhpbmtpbmdfZW5kYCB8IFRoaW5raW5nIGJsb2NrIGNvbXBsZXRlIHwgYGNvbnRlbnRgOiBGdWxsIHRoaW5raW5nLCBgY29udGVudEluZGV4YDogUG9zaXRpb24gfFxufCBgdG9vbGNhbGxfc3RhcnRgIHwgVG9vbCBjYWxsIGJlZ2lucyB8IGBjb250ZW50SW5kZXhgOiBQb3NpdGlvbiBpbiBjb250ZW50IGFycmF5IHxcbnwgYHRvb2xjYWxsX2RlbHRhYCB8IFRvb2wgYXJndW1lbnRzIHN0cmVhbWluZyB8IGBkZWx0YWA6IEpTT04gY2h1bmssIGBwYXJ0aWFsLmNvbnRlbnRbY29udGVudEluZGV4XS5hcmd1bWVudHNgOiBQYXJ0aWFsIHBhcnNlZCBhcmdzIHxcbnwgYHRvb2xjYWxsX2VuZGAgfCBUb29sIGNhbGwgY29tcGxldGUgfCBgdG9vbENhbGxgOiBDb21wbGV0ZSB2YWxpZGF0ZWQgdG9vbCBjYWxsIHdpdGggYGlkYCwgYG5hbWVgLCBgYXJndW1lbnRzYCB8XG58IGBkb25lYCB8IFN0cmVhbSBjb21wbGV0ZSB8IGByZWFzb25gOiBTdG9wIHJlYXNvbiAoXCJzdG9wXCIsIFwibGVuZ3RoXCIsIFwidG9vbFVzZVwiKSwgYG1lc3NhZ2VgOiBGaW5hbCBhc3Npc3RhbnQgbWVzc2FnZSB8XG58IGBlcnJvcmAgfCBFcnJvciBvY2N1cnJlZCB8IGByZWFzb25gOiBFcnJvciB0eXBlIChcImVycm9yXCIgb3IgXCJhYm9ydGVkXCIpLCBgZXJyb3JgOiBBc3Npc3RhbnRNZXNzYWdlIHdpdGggcGFydGlhbCBjb250ZW50IHxcblxuIyMgSW1hZ2UgSW5wdXRcblxuTW9kZWxzIHdpdGggdmlzaW9uIGNhcGFiaWxpdGllcyBjYW4gcHJvY2VzcyBpbWFnZXMuIFlvdSBjYW4gY2hlY2sgaWYgYSBtb2RlbCBzdXBwb3J0cyBpbWFnZXMgdmlhIHRoZSBgaW5wdXRgIHByb3BlcnR5LiBJZiB5b3UgcGFzcyBpbWFnZXMgdG8gYSBub24tdmlzaW9uIG1vZGVsLCB0aGV5IGFyZSBzaWxlbnRseSBpZ25vcmVkLlxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBnZXRNb2RlbCwgY29tcGxldGUgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnb3BlbmFpJywgJ2dwdC00by1taW5pJyk7XG5cbi8vIENoZWNrIGlmIG1vZGVsIHN1cHBvcnRzIGltYWdlc1xuaWYgKG1vZGVsLmlucHV0LmluY2x1ZGVzKCdpbWFnZScpKSB7XG4gIGNvbnNvbGUubG9nKCdNb2RlbCBzdXBwb3J0cyB2aXNpb24nKTtcbn1cblxuY29uc3QgaW1hZ2VCdWZmZXIgPSByZWFkRmlsZVN5bmMoJ2ltYWdlLnBuZycpO1xuY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWFnZUJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG5cbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIHtcbiAgbWVzc2FnZXM6IFt7XG4gICAgcm9sZTogJ3VzZXInLFxuICAgIGNvbnRlbnQ6IFtcbiAgICAgIHsgdHlwZTogJ3RleHQnLCB0ZXh0OiAnV2hhdCBpcyBpbiB0aGlzIGltYWdlPycgfSxcbiAgICAgIHsgdHlwZTogJ2ltYWdlJywgZGF0YTogYmFzZTY0SW1hZ2UsIG1pbWVUeXBlOiAnaW1hZ2UvcG5nJyB9XG4gICAgXVxuICB9XVxufSk7XG5cbi8vIEFjY2VzcyB0aGUgcmVzcG9uc2VcbmZvciAoY29uc3QgYmxvY2sgb2YgcmVzcG9uc2UuY29udGVudCkge1xuICBpZiAoYmxvY2sudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgY29uc29sZS5sb2coYmxvY2sudGV4dCk7XG4gIH1cbn1cbmBgYFxuXG4jIyBUaGlua2luZy9SZWFzb25pbmdcblxuTWFueSBtb2RlbHMgc3VwcG9ydCB0aGlua2luZy9yZWFzb25pbmcgY2FwYWJpbGl0aWVzIHdoZXJlIHRoZXkgY2FuIHNob3cgdGhlaXIgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLiBZb3UgY2FuIGNoZWNrIGlmIGEgbW9kZWwgc3VwcG9ydHMgcmVhc29uaW5nIHZpYSB0aGUgYHJlYXNvbmluZ2AgcHJvcGVydHkuIElmIHlvdSBwYXNzIHJlYXNvbmluZyBvcHRpb25zIHRvIGEgbm9uLXJlYXNvbmluZyBtb2RlbCwgdGhleSBhcmUgc2lsZW50bHkgaWdub3JlZC5cblxuIyMjIFVuaWZpZWQgSW50ZXJmYWNlIChzdHJlYW1TaW1wbGUvY29tcGxldGVTaW1wbGUpXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldE1vZGVsLCBzdHJlYW1TaW1wbGUsIGNvbXBsZXRlU2ltcGxlIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIE1hbnkgbW9kZWxzIGFjcm9zcyBwcm92aWRlcnMgc3VwcG9ydCB0aGlua2luZy9yZWFzb25pbmdcbmNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQnKTtcbi8vIG9yIGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTUtbWluaScpO1xuLy8gb3IgZ2V0TW9kZWwoJ2dvb2dsZScsICdnZW1pbmktMi41LWZsYXNoJyk7XG4vLyBvciBnZXRNb2RlbCgneGFpJywgJ2dyb2stY29kZS1mYXN0LTEnKTtcbi8vIG9yIGdldE1vZGVsKCdncm9xJywgJ29wZW5haS9ncHQtb3NzLTIwYicpO1xuLy8gb3IgZ2V0TW9kZWwoJ2NlcmVicmFzJywgJ2dwdC1vc3MtMTIwYicpO1xuLy8gb3IgZ2V0TW9kZWwoJ29wZW5yb3V0ZXInLCAnei1haS9nbG0tNC41dicpO1xuXG4vLyBDaGVjayBpZiBtb2RlbCBzdXBwb3J0cyByZWFzb25pbmdcbmlmIChtb2RlbC5yZWFzb25pbmcpIHtcbiAgY29uc29sZS5sb2coJ01vZGVsIHN1cHBvcnRzIHJlYXNvbmluZy90aGlua2luZycpO1xufVxuXG4vLyBVc2UgdGhlIHNpbXBsaWZpZWQgcmVhc29uaW5nIG9wdGlvblxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZVNpbXBsZShtb2RlbCwge1xuICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnU29sdmU6IDJ4ICsgNSA9IDEzJyB9XVxufSwge1xuICByZWFzb25pbmc6ICdtZWRpdW0nICAvLyAnbWluaW1hbCcgfCAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ3hoaWdoJyAoeGhpZ2ggbWFwcyB0byBoaWdoIG9uIG5vbi1PcGVuQUkgcHJvdmlkZXJzKVxufSk7XG5cbi8vIEFjY2VzcyB0aGlua2luZyBhbmQgdGV4dCBibG9ja3NcbmZvciAoY29uc3QgYmxvY2sgb2YgcmVzcG9uc2UuY29udGVudCkge1xuICBpZiAoYmxvY2sudHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgIGNvbnNvbGUubG9nKCdUaGlua2luZzonLCBibG9jay50aGlua2luZyk7XG4gIH0gZWxzZSBpZiAoYmxvY2sudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgY29uc29sZS5sb2coJ1Jlc3BvbnNlOicsIGJsb2NrLnRleHQpO1xuICB9XG59XG5gYGBcblxuIyMjIFByb3ZpZGVyLVNwZWNpZmljIE9wdGlvbnMgKHN0cmVhbS9jb21wbGV0ZSlcblxuRm9yIGZpbmUtZ3JhaW5lZCBjb250cm9sLCB1c2UgdGhlIHByb3ZpZGVyLXNwZWNpZmljIG9wdGlvbnM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldE1vZGVsLCBjb21wbGV0ZSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBPcGVuQUkgUmVhc29uaW5nIChvMSwgbzMsIGdwdC01KVxuY29uc3Qgb3BlbmFpTW9kZWwgPSBnZXRNb2RlbCgnb3BlbmFpJywgJ2dwdC01LW1pbmknKTtcbmF3YWl0IGNvbXBsZXRlKG9wZW5haU1vZGVsLCBjb250ZXh0LCB7XG4gIHJlYXNvbmluZ0VmZm9ydDogJ21lZGl1bScsXG4gIHJlYXNvbmluZ1N1bW1hcnk6ICdkZXRhaWxlZCcgIC8vIE9wZW5BSSBSZXNwb25zZXMgQVBJIG9ubHlcbn0pO1xuXG4vLyBBbnRocm9waWMgVGhpbmtpbmcgKENsYXVkZSBTb25uZXQgNClcbmNvbnN0IGFudGhyb3BpY01vZGVsID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQnKTtcbmF3YWl0IGNvbXBsZXRlKGFudGhyb3BpY01vZGVsLCBjb250ZXh0LCB7XG4gIHRoaW5raW5nRW5hYmxlZDogdHJ1ZSxcbiAgdGhpbmtpbmdCdWRnZXRUb2tlbnM6IDgxOTIgIC8vIE9wdGlvbmFsIHRva2VuIGxpbWl0XG59KTtcblxuLy8gR29vZ2xlIEdlbWluaSBUaGlua2luZ1xuY29uc3QgZ29vZ2xlTW9kZWwgPSBnZXRNb2RlbCgnZ29vZ2xlJywgJ2dlbWluaS0yLjUtZmxhc2gnKTtcbmF3YWl0IGNvbXBsZXRlKGdvb2dsZU1vZGVsLCBjb250ZXh0LCB7XG4gIHRoaW5raW5nOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBidWRnZXRUb2tlbnM6IDgxOTIgIC8vIC0xIGZvciBkeW5hbWljLCAwIHRvIGRpc2FibGVcbiAgfVxufSk7XG5gYGBcblxuIyMjIFN0cmVhbWluZyBUaGlua2luZyBDb250ZW50XG5cbldoZW4gc3RyZWFtaW5nLCB0aGlua2luZyBjb250ZW50IGlzIGRlbGl2ZXJlZCB0aHJvdWdoIHNwZWNpZmljIGV2ZW50czpcblxuYGBgdHlwZXNjcmlwdFxuY29uc3QgcyA9IHN0cmVhbVNpbXBsZShtb2RlbCwgY29udGV4dCwgeyByZWFzb25pbmc6ICdoaWdoJyB9KTtcblxuZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzKSB7XG4gIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgIGNhc2UgJ3RoaW5raW5nX3N0YXJ0JzpcbiAgICAgIGNvbnNvbGUubG9nKCdbTW9kZWwgc3RhcnRlZCB0aGlua2luZ10nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RoaW5raW5nX2RlbHRhJzpcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGV2ZW50LmRlbHRhKTsgIC8vIFN0cmVhbSB0aGlua2luZyBjb250ZW50XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0aGlua2luZ19lbmQnOlxuICAgICAgY29uc29sZS5sb2coJ1xcbltUaGlua2luZyBjb21wbGV0ZV0nKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5gYGBcblxuIyMgU3RvcCBSZWFzb25zXG5cbkV2ZXJ5IGBBc3Npc3RhbnRNZXNzYWdlYCBpbmNsdWRlcyBhIGBzdG9wUmVhc29uYCBmaWVsZCB0aGF0IGluZGljYXRlcyBob3cgdGhlIGdlbmVyYXRpb24gZW5kZWQ6XG5cbi0gYFwic3RvcFwiYCAtIE5vcm1hbCBjb21wbGV0aW9uLCB0aGUgbW9kZWwgZmluaXNoZWQgaXRzIHJlc3BvbnNlXG4tIGBcImxlbmd0aFwiYCAtIE91dHB1dCBoaXQgdGhlIG1heGltdW0gdG9rZW4gbGltaXRcbi0gYFwidG9vbFVzZVwiYCAtIE1vZGVsIGlzIGNhbGxpbmcgdG9vbHMgYW5kIGV4cGVjdHMgdG9vbCByZXN1bHRzXG4tIGBcImVycm9yXCJgIC0gQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGdlbmVyYXRpb25cbi0gYFwiYWJvcnRlZFwiYCAtIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZCB2aWEgYWJvcnQgc2lnbmFsXG5cbiMjIEVycm9yIEhhbmRsaW5nXG5cbldoZW4gYSByZXF1ZXN0IGVuZHMgd2l0aCBhbiBlcnJvciAoaW5jbHVkaW5nIGFib3J0cyBhbmQgdG9vbCBjYWxsIHZhbGlkYXRpb24gZXJyb3JzKSwgdGhlIHN0cmVhbWluZyBBUEkgZW1pdHMgYW4gZXJyb3IgZXZlbnQ6XG5cbmBgYHR5cGVzY3JpcHRcbi8vIEluIHN0cmVhbWluZ1xuZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzdHJlYW0pIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyBldmVudC5yZWFzb24gaXMgZWl0aGVyIFwiZXJyb3JcIiBvciBcImFib3J0ZWRcIlxuICAgIC8vIGV2ZW50LmVycm9yIGlzIHRoZSBBc3Npc3RhbnRNZXNzYWdlIHdpdGggcGFydGlhbCBjb250ZW50XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgKCR7ZXZlbnQucmVhc29ufSk6YCwgZXZlbnQuZXJyb3IuZXJyb3JNZXNzYWdlKTtcbiAgICBjb25zb2xlLmxvZygnUGFydGlhbCBjb250ZW50OicsIGV2ZW50LmVycm9yLmNvbnRlbnQpO1xuICB9XG59XG5cbi8vIFRoZSBmaW5hbCBtZXNzYWdlIHdpbGwgaGF2ZSB0aGUgZXJyb3IgZGV0YWlsc1xuY29uc3QgbWVzc2FnZSA9IGF3YWl0IHN0cmVhbS5yZXN1bHQoKTtcbmlmIChtZXNzYWdlLnN0b3BSZWFzb24gPT09ICdlcnJvcicgfHwgbWVzc2FnZS5zdG9wUmVhc29uID09PSAnYWJvcnRlZCcpIHtcbiAgY29uc29sZS5lcnJvcignUmVxdWVzdCBmYWlsZWQ6JywgbWVzc2FnZS5lcnJvck1lc3NhZ2UpO1xuICAvLyBtZXNzYWdlLmNvbnRlbnQgY29udGFpbnMgYW55IHBhcnRpYWwgY29udGVudCByZWNlaXZlZCBiZWZvcmUgdGhlIGVycm9yXG4gIC8vIG1lc3NhZ2UudXNhZ2UgY29udGFpbnMgcGFydGlhbCB0b2tlbiBjb3VudHMgYW5kIGNvc3RzXG59XG5gYGBcblxuIyMjIEFib3J0aW5nIFJlcXVlc3RzXG5cblRoZSBhYm9ydCBzaWduYWwgYWxsb3dzIHlvdSB0byBjYW5jZWwgaW4tcHJvZ3Jlc3MgcmVxdWVzdHMuIEFib3J0ZWQgcmVxdWVzdHMgaGF2ZSBgc3RvcFJlYXNvbiA9PT0gJ2Fib3J0ZWQnYDpcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0TW9kZWwsIHN0cmVhbSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcbmNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbi8vIEFib3J0IGFmdGVyIDIgc2Vjb25kc1xuc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDIwMDApO1xuXG5jb25zdCBzID0gc3RyZWFtKG1vZGVsLCB7XG4gIG1lc3NhZ2VzOiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdXcml0ZSBhIGxvbmcgc3RvcnknIH1dXG59LCB7XG4gIHNpZ25hbDogY29udHJvbGxlci5zaWduYWxcbn0pO1xuXG5mb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHMpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd0ZXh0X2RlbHRhJykge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGV2ZW50LmRlbHRhKTtcbiAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnZXJyb3InKSB7XG4gICAgLy8gZXZlbnQucmVhc29uIHRlbGxzIHlvdSBpZiBpdCB3YXMgXCJlcnJvclwiIG9yIFwiYWJvcnRlZFwiXG4gICAgY29uc29sZS5sb2coYCR7ZXZlbnQucmVhc29uID09PSAnYWJvcnRlZCcgPyAnQWJvcnRlZCcgOiAnRXJyb3InfTpgLCBldmVudC5lcnJvci5lcnJvck1lc3NhZ2UpO1xuICB9XG59XG5cbi8vIEdldCByZXN1bHRzIChtYXkgYmUgcGFydGlhbCBpZiBhYm9ydGVkKVxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzLnJlc3VsdCgpO1xuaWYgKHJlc3BvbnNlLnN0b3BSZWFzb24gPT09ICdhYm9ydGVkJykge1xuICBjb25zb2xlLmxvZygnUmVxdWVzdCB3YXMgYWJvcnRlZDonLCByZXNwb25zZS5lcnJvck1lc3NhZ2UpO1xuICBjb25zb2xlLmxvZygnUGFydGlhbCBjb250ZW50IHJlY2VpdmVkOicsIHJlc3BvbnNlLmNvbnRlbnQpO1xuICBjb25zb2xlLmxvZygnVG9rZW5zIHVzZWQ6JywgcmVzcG9uc2UudXNhZ2UpO1xufVxuYGBgXG5cbiMjIyBDb250aW51aW5nIEFmdGVyIEFib3J0XG5cbkFib3J0ZWQgbWVzc2FnZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBjb252ZXJzYXRpb24gY29udGV4dCBhbmQgY29udGludWVkIGluIHN1YnNlcXVlbnQgcmVxdWVzdHM6XG5cbmBgYHR5cGVzY3JpcHRcbmNvbnN0IGNvbnRleHQgPSB7XG4gIG1lc3NhZ2VzOiBbXG4gICAgeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdFeHBsYWluIHF1YW50dW0gY29tcHV0aW5nIGluIGRldGFpbCcgfVxuICBdXG59O1xuXG4vLyBGaXJzdCByZXF1ZXN0IGdldHMgYWJvcnRlZCBhZnRlciAyIHNlY29uZHNcbmNvbnN0IGNvbnRyb2xsZXIxID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyMS5hYm9ydCgpLCAyMDAwKTtcblxuY29uc3QgcGFydGlhbCA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCBjb250ZXh0LCB7IHNpZ25hbDogY29udHJvbGxlcjEuc2lnbmFsIH0pO1xuXG4vLyBBZGQgdGhlIHBhcnRpYWwgcmVzcG9uc2UgdG8gY29udGV4dFxuY29udGV4dC5tZXNzYWdlcy5wdXNoKHBhcnRpYWwpO1xuY29udGV4dC5tZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnUGxlYXNlIGNvbnRpbnVlJyB9KTtcblxuLy8gQ29udGludWUgdGhlIGNvbnZlcnNhdGlvblxuY29uc3QgY29udGludWF0aW9uID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQpO1xuYGBgXG5cbiMjIyBEZWJ1Z2dpbmcgUHJvdmlkZXIgUGF5bG9hZHNcblxuVXNlIHRoZSBgb25QYXlsb2FkYCBjYWxsYmFjayB0byBpbnNwZWN0IHRoZSByZXF1ZXN0IHBheWxvYWQgc2VudCB0byB0aGUgcHJvdmlkZXIuIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcmVxdWVzdCBmb3JtYXR0aW5nIGlzc3VlcyBvciBwcm92aWRlciB2YWxpZGF0aW9uIGVycm9ycy5cblxuYGBgdHlwZXNjcmlwdFxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCwge1xuICBvblBheWxvYWQ6IChwYXlsb2FkKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ1Byb3ZpZGVyIHBheWxvYWQ6JywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xuICB9XG59KTtcbmBgYFxuXG5UaGUgY2FsbGJhY2sgaXMgc3VwcG9ydGVkIGJ5IGBzdHJlYW1gLCBgY29tcGxldGVgLCBgc3RyZWFtU2ltcGxlYCwgYW5kIGBjb21wbGV0ZVNpbXBsZWAuXG5cbiMjIEFQSXMsIE1vZGVscywgYW5kIFByb3ZpZGVyc1xuXG5UaGUgbGlicmFyeSB1c2VzIGEgcmVnaXN0cnkgb2YgQVBJIGltcGxlbWVudGF0aW9ucy4gQnVpbHQtaW4gQVBJcyBpbmNsdWRlOlxuXG4tICoqYGFudGhyb3BpYy1tZXNzYWdlc2AqKjogQW50aHJvcGljIE1lc3NhZ2VzIEFQSSAoYHN0cmVhbUFudGhyb3BpY2AsIGBBbnRocm9waWNPcHRpb25zYClcbi0gKipgZ29vZ2xlLWdlbmVyYXRpdmUtYWlgKio6IEdvb2dsZSBHZW5lcmF0aXZlIEFJIEFQSSAoYHN0cmVhbUdvb2dsZWAsIGBHb29nbGVPcHRpb25zYClcbi0gKipgZ29vZ2xlLWdlbWluaS1jbGlgKio6IEdvb2dsZSBDbG91ZCBDb2RlIEFzc2lzdCBBUEkgKGBzdHJlYW1Hb29nbGVHZW1pbmlDbGlgLCBgR29vZ2xlR2VtaW5pQ2xpT3B0aW9uc2ApXG4tICoqYGdvb2dsZS12ZXJ0ZXhgKio6IEdvb2dsZSBWZXJ0ZXggQUkgQVBJIChgc3RyZWFtR29vZ2xlVmVydGV4YCwgYEdvb2dsZVZlcnRleE9wdGlvbnNgKVxuLSAqKmBvcGVuYWktY29tcGxldGlvbnNgKio6IE9wZW5BSSBDaGF0IENvbXBsZXRpb25zIEFQSSAoYHN0cmVhbU9wZW5BSUNvbXBsZXRpb25zYCwgYE9wZW5BSUNvbXBsZXRpb25zT3B0aW9uc2ApXG4tICoqYG9wZW5haS1yZXNwb25zZXNgKio6IE9wZW5BSSBSZXNwb25zZXMgQVBJIChgc3RyZWFtT3BlbkFJUmVzcG9uc2VzYCwgYE9wZW5BSVJlc3BvbnNlc09wdGlvbnNgKVxuLSAqKmBvcGVuYWktY29kZXgtcmVzcG9uc2VzYCoqOiBPcGVuQUkgQ29kZXggUmVzcG9uc2VzIEFQSSAoYHN0cmVhbU9wZW5BSUNvZGV4UmVzcG9uc2VzYCwgYE9wZW5BSUNvZGV4UmVzcG9uc2VzT3B0aW9uc2ApXG4tICoqYGF6dXJlLW9wZW5haS1yZXNwb25zZXNgKio6IEF6dXJlIE9wZW5BSSBSZXNwb25zZXMgQVBJIChgc3RyZWFtQXp1cmVPcGVuQUlSZXNwb25zZXNgLCBgQXp1cmVPcGVuQUlSZXNwb25zZXNPcHRpb25zYClcbi0gKipgYmVkcm9jay1jb252ZXJzZS1zdHJlYW1gKio6IEFtYXpvbiBCZWRyb2NrIENvbnZlcnNlIEFQSSAoYHN0cmVhbUJlZHJvY2tgLCBgQmVkcm9ja09wdGlvbnNgKVxuXG4jIyMgUHJvdmlkZXJzIGFuZCBNb2RlbHNcblxuQSAqKnByb3ZpZGVyKiogb2ZmZXJzIG1vZGVscyB0aHJvdWdoIGEgc3BlY2lmaWMgQVBJLiBGb3IgZXhhbXBsZTpcbi0gKipBbnRocm9waWMqKiBtb2RlbHMgdXNlIHRoZSBgYW50aHJvcGljLW1lc3NhZ2VzYCBBUElcbi0gKipHb29nbGUqKiBtb2RlbHMgdXNlIHRoZSBgZ29vZ2xlLWdlbmVyYXRpdmUtYWlgIEFQSVxuLSAqKk9wZW5BSSoqIG1vZGVscyB1c2UgdGhlIGBvcGVuYWktcmVzcG9uc2VzYCBBUElcbi0gKipNaXN0cmFsLCB4QUksIENlcmVicmFzLCBHcm9xLCBldGMuKiogbW9kZWxzIHVzZSB0aGUgYG9wZW5haS1jb21wbGV0aW9uc2AgQVBJIChPcGVuQUktY29tcGF0aWJsZSlcblxuIyMjIFF1ZXJ5aW5nIFByb3ZpZGVycyBhbmQgTW9kZWxzXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldFByb3ZpZGVycywgZ2V0TW9kZWxzLCBnZXRNb2RlbCB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBHZXQgYWxsIGF2YWlsYWJsZSBwcm92aWRlcnNcbmNvbnN0IHByb3ZpZGVycyA9IGdldFByb3ZpZGVycygpO1xuY29uc29sZS5sb2cocHJvdmlkZXJzKTsgLy8gWydvcGVuYWknLCAnYW50aHJvcGljJywgJ2dvb2dsZScsICd4YWknLCAnZ3JvcScsIC4uLl1cblxuLy8gR2V0IGFsbCBtb2RlbHMgZnJvbSBhIHByb3ZpZGVyIChmdWxseSB0eXBlZClcbmNvbnN0IGFudGhyb3BpY01vZGVscyA9IGdldE1vZGVscygnYW50aHJvcGljJyk7XG5mb3IgKGNvbnN0IG1vZGVsIG9mIGFudGhyb3BpY01vZGVscykge1xuICBjb25zb2xlLmxvZyhgJHttb2RlbC5pZH06ICR7bW9kZWwubmFtZX1gKTtcbiAgY29uc29sZS5sb2coYCAgQVBJOiAke21vZGVsLmFwaX1gKTsgLy8gJ2FudGhyb3BpYy1tZXNzYWdlcydcbiAgY29uc29sZS5sb2coYCAgQ29udGV4dDogJHttb2RlbC5jb250ZXh0V2luZG93fSB0b2tlbnNgKTtcbiAgY29uc29sZS5sb2coYCAgVmlzaW9uOiAke21vZGVsLmlucHV0LmluY2x1ZGVzKCdpbWFnZScpfWApO1xuICBjb25zb2xlLmxvZyhgICBSZWFzb25pbmc6ICR7bW9kZWwucmVhc29uaW5nfWApO1xufVxuXG4vLyBHZXQgYSBzcGVjaWZpYyBtb2RlbCAoYm90aCBwcm92aWRlciBhbmQgbW9kZWwgSUQgYXJlIGF1dG8tY29tcGxldGVkIGluIElERXMpXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcbmNvbnNvbGUubG9nKGBVc2luZyAke21vZGVsLm5hbWV9IHZpYSAke21vZGVsLmFwaX0gQVBJYCk7XG5gYGBcblxuIyMjIEN1c3RvbSBNb2RlbHNcblxuWW91IGNhbiBjcmVhdGUgY3VzdG9tIG1vZGVscyBmb3IgbG9jYWwgaW5mZXJlbmNlIHNlcnZlcnMgb3IgY3VzdG9tIGVuZHBvaW50czpcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgTW9kZWwsIHN0cmVhbSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBFeGFtcGxlOiBPbGxhbWEgdXNpbmcgT3BlbkFJLWNvbXBhdGlibGUgQVBJXG5jb25zdCBvbGxhbWFNb2RlbDogTW9kZWw8J29wZW5haS1jb21wbGV0aW9ucyc+ID0ge1xuICBpZDogJ2xsYW1hLTMuMS04YicsXG4gIG5hbWU6ICdMbGFtYSAzLjEgOEIgKE9sbGFtYSknLFxuICBhcGk6ICdvcGVuYWktY29tcGxldGlvbnMnLFxuICBwcm92aWRlcjogJ29sbGFtYScsXG4gIGJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjExNDM0L3YxJyxcbiAgcmVhc29uaW5nOiBmYWxzZSxcbiAgaW5wdXQ6IFsndGV4dCddLFxuICBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LFxuICBjb250ZXh0V2luZG93OiAxMjgwMDAsXG4gIG1heFRva2VuczogMzIwMDBcbn07XG5cbi8vIEV4YW1wbGU6IExpdGVMTE0gcHJveHkgd2l0aCBleHBsaWNpdCBjb21wYXQgc2V0dGluZ3NcbmNvbnN0IGxpdGVsbG1Nb2RlbDogTW9kZWw8J29wZW5haS1jb21wbGV0aW9ucyc+ID0ge1xuICBpZDogJ2dwdC00bycsXG4gIG5hbWU6ICdHUFQtNG8gKHZpYSBMaXRlTExNKScsXG4gIGFwaTogJ29wZW5haS1jb21wbGV0aW9ucycsXG4gIHByb3ZpZGVyOiAnbGl0ZWxsbScsXG4gIGJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjQwMDAvdjEnLFxuICByZWFzb25pbmc6IGZhbHNlLFxuICBpbnB1dDogWyd0ZXh0JywgJ2ltYWdlJ10sXG4gIGNvc3Q6IHsgaW5wdXQ6IDIuNSwgb3V0cHV0OiAxMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sXG4gIGNvbnRleHRXaW5kb3c6IDEyODAwMCxcbiAgbWF4VG9rZW5zOiAxNjM4NCxcbiAgY29tcGF0OiB7XG4gICAgc3VwcG9ydHNTdG9yZTogZmFsc2UsICAvLyBMaXRlTExNIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3RvcmUgZmllbGRcbiAgfVxufTtcblxuLy8gRXhhbXBsZTogQ3VzdG9tIGVuZHBvaW50IHdpdGggaGVhZGVycyAoYnlwYXNzaW5nIENsb3VkZmxhcmUgYm90IGRldGVjdGlvbilcbmNvbnN0IHByb3h5TW9kZWw6IE1vZGVsPCdhbnRocm9waWMtbWVzc2FnZXMnPiA9IHtcbiAgaWQ6ICdjbGF1ZGUtc29ubmV0LTQnLFxuICBuYW1lOiAnQ2xhdWRlIFNvbm5ldCA0IChQcm94aWVkKScsXG4gIGFwaTogJ2FudGhyb3BpYy1tZXNzYWdlcycsXG4gIHByb3ZpZGVyOiAnY3VzdG9tLXByb3h5JyxcbiAgYmFzZVVybDogJ2h0dHBzOi8vcHJveHkuZXhhbXBsZS5jb20vdjEnLFxuICByZWFzb25pbmc6IHRydWUsXG4gIGlucHV0OiBbJ3RleHQnLCAnaW1hZ2UnXSxcbiAgY29zdDogeyBpbnB1dDogMywgb3V0cHV0OiAxNSwgY2FjaGVSZWFkOiAwLjMsIGNhY2hlV3JpdGU6IDMuNzUgfSxcbiAgY29udGV4dFdpbmRvdzogMjAwMDAwLFxuICBtYXhUb2tlbnM6IDgxOTIsXG4gIGhlYWRlcnM6IHtcbiAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV83KSBBcHBsZVdlYktpdC81MzcuMzYnLFxuICAgICdYLUN1c3RvbS1BdXRoJzogJ2JlYXJlci10b2tlbi1oZXJlJ1xuICB9XG59O1xuXG4vLyBVc2UgdGhlIGN1c3RvbSBtb2RlbFxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzdHJlYW0ob2xsYW1hTW9kZWwsIGNvbnRleHQsIHtcbiAgYXBpS2V5OiAnZHVtbXknIC8vIE9sbGFtYSBkb2Vzbid0IG5lZWQgYSByZWFsIGtleVxufSk7XG5gYGBcblxuIyMjIE9wZW5BSSBDb21wYXRpYmlsaXR5IFNldHRpbmdzXG5cblRoZSBgb3BlbmFpLWNvbXBsZXRpb25zYCBBUEkgaXMgaW1wbGVtZW50ZWQgYnkgbWFueSBwcm92aWRlcnMgd2l0aCBtaW5vciBkaWZmZXJlbmNlcy4gQnkgZGVmYXVsdCwgdGhlIGxpYnJhcnkgYXV0by1kZXRlY3RzIGNvbXBhdGliaWxpdHkgc2V0dGluZ3MgYmFzZWQgb24gYGJhc2VVcmxgIGZvciBrbm93biBwcm92aWRlcnMgKENlcmVicmFzLCB4QUksIE1pc3RyYWwsIENodXRlcywgZXRjLikuIEZvciBjdXN0b20gcHJveGllcyBvciB1bmtub3duIGVuZHBvaW50cywgeW91IGNhbiBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyB2aWEgdGhlIGBjb21wYXRgIGZpZWxkLiBGb3IgYG9wZW5haS1yZXNwb25zZXNgIG1vZGVscywgdGhlIGNvbXBhdCBmaWVsZCBvbmx5IHN1cHBvcnRzIFJlc3BvbnNlcy1zcGVjaWZpYyBmbGFncy5cblxuYGBgdHlwZXNjcmlwdFxuaW50ZXJmYWNlIE9wZW5BSUNvbXBsZXRpb25zQ29tcGF0IHtcbiAgc3VwcG9ydHNTdG9yZT86IGJvb2xlYW47ICAgICAgICAgICAvLyBXaGV0aGVyIHByb3ZpZGVyIHN1cHBvcnRzIHRoZSBgc3RvcmVgIGZpZWxkIChkZWZhdWx0OiB0cnVlKVxuICBzdXBwb3J0c0RldmVsb3BlclJvbGU/OiBib29sZWFuOyAgIC8vIFdoZXRoZXIgcHJvdmlkZXIgc3VwcG9ydHMgYGRldmVsb3BlcmAgcm9sZSB2cyBgc3lzdGVtYCAoZGVmYXVsdDogdHJ1ZSlcbiAgc3VwcG9ydHNSZWFzb25pbmdFZmZvcnQ/OiBib29sZWFuOyAvLyBXaGV0aGVyIHByb3ZpZGVyIHN1cHBvcnRzIGByZWFzb25pbmdfZWZmb3J0YCAoZGVmYXVsdDogdHJ1ZSlcbiAgc3VwcG9ydHNVc2FnZUluU3RyZWFtaW5nPzogYm9vbGVhbjsgLy8gV2hldGhlciBwcm92aWRlciBzdXBwb3J0cyBgc3RyZWFtX29wdGlvbnM6IHsgaW5jbHVkZV91c2FnZTogdHJ1ZSB9YCAoZGVmYXVsdDogdHJ1ZSlcbiAgc3VwcG9ydHNTdHJpY3RNb2RlPzogYm9vbGVhbjsgICAgICAvLyBXaGV0aGVyIHByb3ZpZGVyIHN1cHBvcnRzIGBzdHJpY3RgIGluIHRvb2wgZGVmaW5pdGlvbnMgKGRlZmF1bHQ6IHRydWUpXG4gIG1heFRva2Vuc0ZpZWxkPzogJ21heF9jb21wbGV0aW9uX3Rva2VucycgfCAnbWF4X3Rva2Vucyc7ICAvLyBXaGljaCBmaWVsZCBuYW1lIHRvIHVzZSAoZGVmYXVsdDogbWF4X2NvbXBsZXRpb25fdG9rZW5zKVxuICByZXF1aXJlc1Rvb2xSZXN1bHROYW1lPzogYm9vbGVhbjsgIC8vIFdoZXRoZXIgdG9vbCByZXN1bHRzIHJlcXVpcmUgdGhlIGBuYW1lYCBmaWVsZCAoZGVmYXVsdDogZmFsc2UpXG4gIHJlcXVpcmVzQXNzaXN0YW50QWZ0ZXJUb29sUmVzdWx0PzogYm9vbGVhbjsgLy8gV2hldGhlciB0b29sIHJlc3VsdHMgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiBhc3Npc3RhbnQgbWVzc2FnZSAoZGVmYXVsdDogZmFsc2UpXG4gIHJlcXVpcmVzVGhpbmtpbmdBc1RleHQ/OiBib29sZWFuOyAgLy8gV2hldGhlciB0aGlua2luZyBibG9ja3MgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gdGV4dCAoZGVmYXVsdDogZmFsc2UpXG4gIHJlcXVpcmVzTWlzdHJhbFRvb2xJZHM/OiBib29sZWFuOyAgLy8gV2hldGhlciB0b29sIGNhbGwgSURzIG11c3QgYmUgbm9ybWFsaXplZCB0byBNaXN0cmFsIGZvcm1hdCAoZGVmYXVsdDogZmFsc2UpXG4gIHRoaW5raW5nRm9ybWF0PzogJ29wZW5haScgfCAnemFpJyB8ICdxd2VuJzsgLy8gRm9ybWF0IGZvciByZWFzb25pbmcgcGFyYW06ICdvcGVuYWknIHVzZXMgcmVhc29uaW5nX2VmZm9ydCwgJ3phaScgdXNlcyB0aGlua2luZzogeyB0eXBlOiBcImVuYWJsZWRcIiB9LCAncXdlbicgdXNlcyBlbmFibGVfdGhpbmtpbmc6IGJvb2xlYW4gKGRlZmF1bHQ6IG9wZW5haSlcbiAgb3BlblJvdXRlclJvdXRpbmc/OiBPcGVuUm91dGVyUm91dGluZzsgLy8gT3BlblJvdXRlciByb3V0aW5nIHByZWZlcmVuY2VzIChkZWZhdWx0OiB7fSlcbiAgdmVyY2VsR2F0ZXdheVJvdXRpbmc/OiBWZXJjZWxHYXRld2F5Um91dGluZzsgLy8gVmVyY2VsIEFJIEdhdGV3YXkgcm91dGluZyBwcmVmZXJlbmNlcyAoZGVmYXVsdDoge30pXG59XG5cbmludGVyZmFjZSBPcGVuQUlSZXNwb25zZXNDb21wYXQge1xuICAvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxufVxuYGBgXG5cbklmIGBjb21wYXRgIGlzIG5vdCBzZXQsIHRoZSBsaWJyYXJ5IGZhbGxzIGJhY2sgdG8gVVJMLWJhc2VkIGRldGVjdGlvbi4gSWYgYGNvbXBhdGAgaXMgcGFydGlhbGx5IHNldCwgdW5zcGVjaWZpZWQgZmllbGRzIHVzZSB0aGUgZGV0ZWN0ZWQgZGVmYXVsdHMuIFRoaXMgaXMgdXNlZnVsIGZvcjpcblxuLSAqKkxpdGVMTE0gcHJveGllcyoqOiBNYXkgbm90IHN1cHBvcnQgYHN0b3JlYCBmaWVsZFxuLSAqKkN1c3RvbSBpbmZlcmVuY2Ugc2VydmVycyoqOiBNYXkgdXNlIG5vbi1zdGFuZGFyZCBmaWVsZCBuYW1lc1xuLSAqKlNlbGYtaG9zdGVkIGVuZHBvaW50cyoqOiBNYXkgaGF2ZSBkaWZmZXJlbnQgZmVhdHVyZSBzdXBwb3J0XG5cbiMjIyBUeXBlIFNhZmV0eVxuXG5Nb2RlbHMgYXJlIHR5cGVkIGJ5IHRoZWlyIEFQSSwgd2hpY2gga2VlcHMgdGhlIG1vZGVsIG1ldGFkYXRhIGFjY3VyYXRlLiBQcm92aWRlci1zcGVjaWZpYyBvcHRpb24gdHlwZXMgYXJlIGVuZm9yY2VkIHdoZW4geW91IGNhbGwgdGhlIHByb3ZpZGVyIGZ1bmN0aW9ucyBkaXJlY3RseS4gVGhlIGdlbmVyaWMgYHN0cmVhbWAgYW5kIGBjb21wbGV0ZWAgZnVuY3Rpb25zIGFjY2VwdCBgU3RyZWFtT3B0aW9uc2Agd2l0aCBhZGRpdGlvbmFsIHByb3ZpZGVyIGZpZWxkcy5cblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgc3RyZWFtQW50aHJvcGljLCB0eXBlIEFudGhyb3BpY09wdGlvbnMgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gVHlwZVNjcmlwdCBrbm93cyB0aGlzIGlzIGFuIEFudGhyb3BpYyBtb2RlbFxuY29uc3QgY2xhdWRlID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQnKTtcblxuY29uc3Qgb3B0aW9uczogQW50aHJvcGljT3B0aW9ucyA9IHtcbiAgdGhpbmtpbmdFbmFibGVkOiB0cnVlLFxuICB0aGlua2luZ0J1ZGdldFRva2VuczogMjA0OFxufTtcblxuYXdhaXQgc3RyZWFtQW50aHJvcGljKGNsYXVkZSwgY29udGV4dCwgb3B0aW9ucyk7XG5gYGBcblxuIyMgQ3Jvc3MtUHJvdmlkZXIgSGFuZG9mZnNcblxuVGhlIGxpYnJhcnkgc3VwcG9ydHMgc2VhbWxlc3MgaGFuZG9mZnMgYmV0d2VlbiBkaWZmZXJlbnQgTExNIHByb3ZpZGVycyB3aXRoaW4gdGhlIHNhbWUgY29udmVyc2F0aW9uLiBUaGlzIGFsbG93cyB5b3UgdG8gc3dpdGNoIG1vZGVscyBtaWQtY29udmVyc2F0aW9uIHdoaWxlIHByZXNlcnZpbmcgY29udGV4dCwgaW5jbHVkaW5nIHRoaW5raW5nIGJsb2NrcywgdG9vbCBjYWxscywgYW5kIHRvb2wgcmVzdWx0cy5cblxuIyMjIEhvdyBJdCBXb3Jrc1xuXG5XaGVuIG1lc3NhZ2VzIGZyb20gb25lIHByb3ZpZGVyIGFyZSBzZW50IHRvIGEgZGlmZmVyZW50IHByb3ZpZGVyLCB0aGUgbGlicmFyeSBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybXMgdGhlbSBmb3IgY29tcGF0aWJpbGl0eTpcblxuLSAqKlVzZXIgYW5kIHRvb2wgcmVzdWx0IG1lc3NhZ2VzKiogYXJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZFxuLSAqKkFzc2lzdGFudCBtZXNzYWdlcyBmcm9tIHRoZSBzYW1lIHByb3ZpZGVyL0FQSSoqIGFyZSBwcmVzZXJ2ZWQgYXMtaXNcbi0gKipBc3Npc3RhbnQgbWVzc2FnZXMgZnJvbSBkaWZmZXJlbnQgcHJvdmlkZXJzKiogaGF2ZSB0aGVpciB0aGlua2luZyBibG9ja3MgY29udmVydGVkIHRvIHRleHQgd2l0aCBgPHRoaW5raW5nPmAgdGFnc1xuLSAqKlRvb2wgY2FsbHMgYW5kIHJlZ3VsYXIgdGV4dCoqIGFyZSBwcmVzZXJ2ZWQgdW5jaGFuZ2VkXG5cbiMjIyBFeGFtcGxlOiBNdWx0aS1Qcm92aWRlciBDb252ZXJzYXRpb25cblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0TW9kZWwsIGNvbXBsZXRlLCBDb250ZXh0IH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIFN0YXJ0IHdpdGggQ2xhdWRlXG5jb25zdCBjbGF1ZGUgPSBnZXRNb2RlbCgnYW50aHJvcGljJywgJ2NsYXVkZS1zb25uZXQtNC0yMDI1MDUxNCcpO1xuY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgbWVzc2FnZXM6IFtdXG59O1xuXG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2goeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdXaGF0IGlzIDI1ICogMTg/JyB9KTtcbmNvbnN0IGNsYXVkZVJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUoY2xhdWRlLCBjb250ZXh0LCB7XG4gIHRoaW5raW5nRW5hYmxlZDogdHJ1ZVxufSk7XG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2goY2xhdWRlUmVzcG9uc2UpO1xuXG4vLyBTd2l0Y2ggdG8gR1BULTUgLSBpdCB3aWxsIHNlZSBDbGF1ZGUncyB0aGlua2luZyBhcyA8dGhpbmtpbmc+IHRhZ2dlZCB0ZXh0XG5jb25zdCBncHQ1ID0gZ2V0TW9kZWwoJ29wZW5haScsICdncHQtNS1taW5pJyk7XG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2goeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdJcyB0aGF0IGNhbGN1bGF0aW9uIGNvcnJlY3Q/JyB9KTtcbmNvbnN0IGdwdFJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUoZ3B0NSwgY29udGV4dCk7XG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2goZ3B0UmVzcG9uc2UpO1xuXG4vLyBTd2l0Y2ggdG8gR2VtaW5pXG5jb25zdCBnZW1pbmkgPSBnZXRNb2RlbCgnZ29vZ2xlJywgJ2dlbWluaS0yLjUtZmxhc2gnKTtcbmNvbnRleHQubWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ1doYXQgd2FzIHRoZSBvcmlnaW5hbCBxdWVzdGlvbj8nIH0pO1xuY29uc3QgZ2VtaW5pUmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShnZW1pbmksIGNvbnRleHQpO1xuYGBgXG5cbiMjIyBQcm92aWRlciBDb21wYXRpYmlsaXR5XG5cbkFsbCBwcm92aWRlcnMgY2FuIGhhbmRsZSBtZXNzYWdlcyBmcm9tIG90aGVyIHByb3ZpZGVycywgaW5jbHVkaW5nOlxuLSBUZXh0IGNvbnRlbnRcbi0gVG9vbCBjYWxscyBhbmQgdG9vbCByZXN1bHRzIChpbmNsdWRpbmcgaW1hZ2VzIGluIHRvb2wgcmVzdWx0cylcbi0gVGhpbmtpbmcvcmVhc29uaW5nIGJsb2NrcyAodHJhbnNmb3JtZWQgdG8gdGFnZ2VkIHRleHQgZm9yIGNyb3NzLXByb3ZpZGVyIGNvbXBhdGliaWxpdHkpXG4tIEFib3J0ZWQgbWVzc2FnZXMgd2l0aCBwYXJ0aWFsIGNvbnRlbnRcblxuVGhpcyBlbmFibGVzIGZsZXhpYmxlIHdvcmtmbG93cyB3aGVyZSB5b3UgY2FuOlxuLSBTdGFydCB3aXRoIGEgZmFzdCBtb2RlbCBmb3IgaW5pdGlhbCByZXNwb25zZXNcbi0gU3dpdGNoIHRvIGEgbW9yZSBjYXBhYmxlIG1vZGVsIGZvciBjb21wbGV4IHJlYXNvbmluZ1xuLSBVc2Ugc3BlY2lhbGl6ZWQgbW9kZWxzIGZvciBzcGVjaWZpYyB0YXNrc1xuLSBNYWludGFpbiBjb252ZXJzYXRpb24gY29udGludWl0eSBhY3Jvc3MgcHJvdmlkZXIgb3V0YWdlc1xuXG4jIyBDb250ZXh0IFNlcmlhbGl6YXRpb25cblxuVGhlIGBDb250ZXh0YCBvYmplY3QgY2FuIGJlIGVhc2lseSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgdXNpbmcgc3RhbmRhcmQgSlNPTiBtZXRob2RzLCBtYWtpbmcgaXQgc2ltcGxlIHRvIHBlcnNpc3QgY29udmVyc2F0aW9ucywgaW1wbGVtZW50IGNoYXQgaGlzdG9yeSwgb3IgdHJhbnNmZXIgY29udGV4dHMgYmV0d2VlbiBzZXJ2aWNlczpcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgQ29udGV4dCwgZ2V0TW9kZWwsIGNvbXBsZXRlIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIENyZWF0ZSBhbmQgdXNlIGEgY29udGV4dFxuY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgc3lzdGVtUHJvbXB0OiAnWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LicsXG4gIG1lc3NhZ2VzOiBbXG4gICAgeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdXaGF0IGlzIFR5cGVTY3JpcHQ/JyB9XG4gIF1cbn07XG5cbmNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ29wZW5haScsICdncHQtNG8tbWluaScpO1xuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCk7XG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2gocmVzcG9uc2UpO1xuXG4vLyBTZXJpYWxpemUgdGhlIGVudGlyZSBjb250ZXh0XG5jb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkoY29udGV4dCk7XG5jb25zb2xlLmxvZygnU2VyaWFsaXplZCBjb250ZXh0IHNpemU6Jywgc2VyaWFsaXplZC5sZW5ndGgsICdieXRlcycpO1xuXG4vLyBTYXZlIHRvIGRhdGFiYXNlLCBsb2NhbFN0b3JhZ2UsIGZpbGUsIGV0Yy5cbmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjb252ZXJzYXRpb24nLCBzZXJpYWxpemVkKTtcblxuLy8gTGF0ZXI6IGRlc2VyaWFsaXplIGFuZCBjb250aW51ZSB0aGUgY29udmVyc2F0aW9uXG5jb25zdCByZXN0b3JlZDogQ29udGV4dCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NvbnZlcnNhdGlvbicpISk7XG5yZXN0b3JlZC5tZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnVGVsbCBtZSBtb3JlIGFib3V0IGl0cyB0eXBlIHN5c3RlbScgfSk7XG5cbi8vIENvbnRpbnVlIHdpdGggYW55IG1vZGVsXG5jb25zdCBuZXdNb2RlbCA9IGdldE1vZGVsKCdhbnRocm9waWMnLCAnY2xhdWRlLTMtNS1oYWlrdS0yMDI0MTAyMicpO1xuY29uc3QgY29udGludWF0aW9uID0gYXdhaXQgY29tcGxldGUobmV3TW9kZWwsIHJlc3RvcmVkKTtcbmBgYFxuXG4+ICoqTm90ZSoqOiBJZiB0aGUgY29udGV4dCBjb250YWlucyBpbWFnZXMgKGVuY29kZWQgYXMgYmFzZTY0IGFzIHNob3duIGluIHRoZSBJbWFnZSBJbnB1dCBzZWN0aW9uKSwgdGhvc2Ugd2lsbCBhbHNvIGJlIHNlcmlhbGl6ZWQuXG5cbiMjIEJyb3dzZXIgVXNhZ2VcblxuVGhlIGxpYnJhcnkgc3VwcG9ydHMgYnJvd3NlciBlbnZpcm9ubWVudHMuIFlvdSBtdXN0IHBhc3MgdGhlIEFQSSBrZXkgZXhwbGljaXRseSBzaW5jZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gYnJvd3NlcnM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldE1vZGVsLCBjb21wbGV0ZSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBBUEkga2V5IG11c3QgYmUgcGFzc2VkIGV4cGxpY2l0bHkgaW4gYnJvd3NlclxuY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnYW50aHJvcGljJywgJ2NsYXVkZS0zLTUtaGFpa3UtMjAyNDEwMjInKTtcblxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwge1xuICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnSGVsbG8hJyB9XVxufSwge1xuICBhcGlLZXk6ICd5b3VyLWFwaS1rZXknXG59KTtcbmBgYFxuXG4+ICoqU2VjdXJpdHkgV2FybmluZyoqOiBFeHBvc2luZyBBUEkga2V5cyBpbiBmcm9udGVuZCBjb2RlIGlzIGRhbmdlcm91cy4gQW55b25lIGNhbiBleHRyYWN0IGFuZCBhYnVzZSB5b3VyIGtleXMuIE9ubHkgdXNlIHRoaXMgYXBwcm9hY2ggZm9yIGludGVybmFsIHRvb2xzIG9yIGRlbW9zLiBGb3IgcHJvZHVjdGlvbiBhcHBsaWNhdGlvbnMsIHVzZSBhIGJhY2tlbmQgcHJveHkgdGhhdCBrZWVwcyB5b3VyIEFQSSBrZXlzIHNlY3VyZS5cblxuIyMjIEVudmlyb25tZW50IFZhcmlhYmxlcyAoTm9kZS5qcyBvbmx5KVxuXG5JbiBOb2RlLmpzIGVudmlyb25tZW50cywgeW91IGNhbiBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGF2b2lkIHBhc3NpbmcgQVBJIGtleXM6XG5cbnwgUHJvdmlkZXIgfCBFbnZpcm9ubWVudCBWYXJpYWJsZShzKSB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG58IE9wZW5BSSB8IGBPUEVOQUlfQVBJX0tFWWAgfFxufCBBenVyZSBPcGVuQUkgfCBgQVpVUkVfT1BFTkFJX0FQSV9LRVlgICsgYEFaVVJFX09QRU5BSV9CQVNFX1VSTGAgb3IgYEFaVVJFX09QRU5BSV9SRVNPVVJDRV9OQU1FYCAob3B0aW9uYWwgYEFaVVJFX09QRU5BSV9BUElfVkVSU0lPTmAsIGBBWlVSRV9PUEVOQUlfREVQTE9ZTUVOVF9OQU1FX01BUGAgbGlrZSBgbW9kZWw9ZGVwbG95bWVudCxtb2RlbDI9ZGVwbG95bWVudDJgKSB8XG58IEFudGhyb3BpYyB8IGBBTlRIUk9QSUNfQVBJX0tFWWAgb3IgYEFOVEhST1BJQ19PQVVUSF9UT0tFTmAgfFxufCBHb29nbGUgfCBgR0VNSU5JX0FQSV9LRVlgIHxcbnwgVmVydGV4IEFJIHwgYEdPT0dMRV9DTE9VRF9QUk9KRUNUYCAob3IgYEdDTE9VRF9QUk9KRUNUYCkgKyBgR09PR0xFX0NMT1VEX0xPQ0FUSU9OYCArIEFEQyB8XG58IE1pc3RyYWwgfCBgTUlTVFJBTF9BUElfS0VZYCB8XG58IEdyb3EgfCBgR1JPUV9BUElfS0VZYCB8XG58IENlcmVicmFzIHwgYENFUkVCUkFTX0FQSV9LRVlgIHxcbnwgeEFJIHwgYFhBSV9BUElfS0VZYCB8XG58IE9wZW5Sb3V0ZXIgfCBgT1BFTlJPVVRFUl9BUElfS0VZYCB8XG58IFZlcmNlbCBBSSBHYXRld2F5IHwgYEFJX0dBVEVXQVlfQVBJX0tFWWAgfFxufCB6QUkgfCBgWkFJX0FQSV9LRVlgIHxcbnwgTWluaU1heCB8IGBNSU5JTUFYX0FQSV9LRVlgIHxcbnwgS2ltaSBGb3IgQ29kaW5nIHwgYEtJTUlfQVBJX0tFWWAgfFxufCBHaXRIdWIgQ29waWxvdCB8IGBDT1BJTE9UX0dJVEhVQl9UT0tFTmAgb3IgYEdIX1RPS0VOYCBvciBgR0lUSFVCX1RPS0VOYCB8XG5cbldoZW4gc2V0LCB0aGUgbGlicmFyeSBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlc2Uga2V5czpcblxuYGBgdHlwZXNjcmlwdFxuLy8gVXNlcyBPUEVOQUlfQVBJX0tFWSBmcm9tIGVudmlyb25tZW50XG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQpO1xuXG4vLyBPciBvdmVycmlkZSB3aXRoIGV4cGxpY2l0IGtleVxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCwge1xuICBhcGlLZXk6ICdzay1kaWZmZXJlbnQta2V5J1xufSk7XG5gYGBcblxuIyMjIyBBbnRpZ3Jhdml0eSBWZXJzaW9uIE92ZXJyaWRlXG5cblNldCBgUElfQUlfQU5USUdSQVZJVFlfVkVSU0lPTmAgdG8gb3ZlcnJpZGUgdGhlIEFudGlncmF2aXR5IFVzZXItQWdlbnQgdmVyc2lvbiB3aGVuIEdvb2dsZSB1cGRhdGVzIHRoZWlyIHJlcXVpcmVtZW50czpcblxuYGBgYmFzaFxuZXhwb3J0IFBJX0FJX0FOVElHUkFWSVRZX1ZFUlNJT049XCIxLjIzLjBcIlxuYGBgXG5cbiMjIyMgQ2FjaGUgUmV0ZW50aW9uXG5cblNldCBgUElfQ0FDSEVfUkVURU5USU9OPWxvbmdgIHRvIGV4dGVuZCBwcm9tcHQgY2FjaGUgcmV0ZW50aW9uOlxuXG58IFByb3ZpZGVyIHwgRGVmYXVsdCB8IFdpdGggYFBJX0NBQ0hFX1JFVEVOVElPTj1sb25nYCB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbnwgQW50aHJvcGljIHwgNSBtaW51dGVzIHwgMSBob3VyIHxcbnwgT3BlbkFJIHwgaW4tbWVtb3J5IHwgMjQgaG91cnMgfFxuXG5UaGlzIG9ubHkgYWZmZWN0cyBkaXJlY3QgQVBJIGNhbGxzIHRvIGBhcGkuYW50aHJvcGljLmNvbWAgYW5kIGBhcGkub3BlbmFpLmNvbWAuIFByb3hpZXMgYW5kIG90aGVyIHByb3ZpZGVycyBhcmUgdW5hZmZlY3RlZC5cblxuPiAqKk5vdGUqKjogRXh0ZW5kZWQgY2FjaGUgcmV0ZW50aW9uIG1heSBpbmNyZWFzZSBjb3N0cyBmb3IgQW50aHJvcGljIChjYWNoZSB3cml0ZXMgYXJlIGNoYXJnZWQgYXQgYSBoaWdoZXIgcmF0ZSkuIE9wZW5BSSdzIDI0aCByZXRlbnRpb24gaGFzIG5vIGFkZGl0aW9uYWwgY29zdC5cblxuIyMjIENoZWNraW5nIEVudmlyb25tZW50IFZhcmlhYmxlc1xuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBnZXRFbnZBcGlLZXkgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gQ2hlY2sgaWYgYW4gQVBJIGtleSBpcyBzZXQgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzXG5jb25zdCBrZXkgPSBnZXRFbnZBcGlLZXkoJ29wZW5haScpOyAgLy8gY2hlY2tzIE9QRU5BSV9BUElfS0VZXG5gYGBcblxuIyMgT0F1dGggUHJvdmlkZXJzXG5cblNldmVyYWwgcHJvdmlkZXJzIHJlcXVpcmUgT0F1dGggYXV0aGVudGljYXRpb24gaW5zdGVhZCBvZiBzdGF0aWMgQVBJIGtleXM6XG5cbi0gKipBbnRocm9waWMqKiAoQ2xhdWRlIFByby9NYXggc3Vic2NyaXB0aW9uKVxuLSAqKk9wZW5BSSBDb2RleCoqIChDaGF0R1BUIFBsdXMvUHJvIHN1YnNjcmlwdGlvbiwgYWNjZXNzIHRvIEdQVC01LnggQ29kZXggbW9kZWxzKVxuLSAqKkdpdEh1YiBDb3BpbG90KiogKENvcGlsb3Qgc3Vic2NyaXB0aW9uKVxuLSAqKkdvb2dsZSBHZW1pbmkgQ0xJKiogKEdlbWluaSAyLjAvMi41IHZpYSBHb29nbGUgQ2xvdWQgQ29kZSBBc3Npc3Q7IGZyZWUgdGllciBvciBwYWlkIHN1YnNjcmlwdGlvbilcbi0gKipBbnRpZ3Jhdml0eSoqIChGcmVlIEdlbWluaSAzLCBDbGF1ZGUsIEdQVC1PU1MgdmlhIEdvb2dsZSBDbG91ZClcblxuRm9yIHBhaWQgQ2xvdWQgQ29kZSBBc3Npc3Qgc3Vic2NyaXB0aW9ucywgc2V0IGBHT09HTEVfQ0xPVURfUFJPSkVDVGAgb3IgYEdPT0dMRV9DTE9VRF9QUk9KRUNUX0lEYCB0byB5b3VyIHByb2plY3QgSUQuXG5cbiMjIyBWZXJ0ZXggQUkgKEFEQylcblxuVmVydGV4IEFJIG1vZGVscyB1c2UgQXBwbGljYXRpb24gRGVmYXVsdCBDcmVkZW50aWFscyAoQURDKTpcblxuLSAqKkxvY2FsIGRldmVsb3BtZW50Kio6IFJ1biBgZ2Nsb3VkIGF1dGggYXBwbGljYXRpb24tZGVmYXVsdCBsb2dpbmBcbi0gKipDSS9Qcm9kdWN0aW9uKio6IFNldCBgR09PR0xFX0FQUExJQ0FUSU9OX0NSRURFTlRJQUxTYCB0byBwb2ludCB0byBhIHNlcnZpY2UgYWNjb3VudCBKU09OIGtleSBmaWxlXG5cbkFsc28gc2V0IGBHT09HTEVfQ0xPVURfUFJPSkVDVGAgKG9yIGBHQ0xPVURfUFJPSkVDVGApIGFuZCBgR09PR0xFX0NMT1VEX0xPQ0FUSU9OYC4gWW91IGNhbiBhbHNvIHBhc3MgYHByb2plY3RgL2Bsb2NhdGlvbmAgaW4gdGhlIGNhbGwgb3B0aW9ucy5cblxuRXhhbXBsZTpcblxuYGBgYmFzaFxuIyBMb2NhbCAodXNlcyB5b3VyIHVzZXIgY3JlZGVudGlhbHMpXG5nY2xvdWQgYXV0aCBhcHBsaWNhdGlvbi1kZWZhdWx0IGxvZ2luXG5leHBvcnQgR09PR0xFX0NMT1VEX1BST0pFQ1Q9XCJteS1wcm9qZWN0XCJcbmV4cG9ydCBHT09HTEVfQ0xPVURfTE9DQVRJT049XCJ1cy1jZW50cmFsMVwiXG5cbiMgQ0kvUHJvZHVjdGlvbiAoc2VydmljZSBhY2NvdW50IGtleSBmaWxlKVxuZXhwb3J0IEdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMUz1cIi9wYXRoL3RvL3NlcnZpY2UtYWNjb3VudC5qc29uXCJcbmBgYFxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBnZXRNb2RlbCwgY29tcGxldGUgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuKGFzeW5jICgpID0+IHtcbiAgY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnZ29vZ2xlLXZlcnRleCcsICdnZW1pbmktMi41LWZsYXNoJyk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIHtcbiAgICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnSGVsbG8gZnJvbSBWZXJ0ZXggQUknIH1dXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgYmxvY2sgb2YgcmVzcG9uc2UuY29udGVudCkge1xuICAgIGlmIChibG9jay50eXBlID09PSAndGV4dCcpIGNvbnNvbGUubG9nKGJsb2NrLnRleHQpO1xuICB9XG59KSgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuYGBgXG5cbk9mZmljaWFsIGRvY3M6IFtBcHBsaWNhdGlvbiBEZWZhdWx0IENyZWRlbnRpYWxzXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZG9jcy9hdXRoZW50aWNhdGlvbi9hcHBsaWNhdGlvbi1kZWZhdWx0LWNyZWRlbnRpYWxzKVxuXG4jIyMgQ0xJIExvZ2luXG5cblRoZSBxdWlja2VzdCB3YXkgdG8gYXV0aGVudGljYXRlOlxuXG5gYGBiYXNoXG5ucHggQG1hcmlvemVjaG5lci9waS1haSBsb2dpbiAgICAgICAgICAgICAgIyBpbnRlcmFjdGl2ZSBwcm92aWRlciBzZWxlY3Rpb25cbm5weCBAbWFyaW96ZWNobmVyL3BpLWFpIGxvZ2luIGFudGhyb3BpYyAgICAjIGxvZ2luIHRvIHNwZWNpZmljIHByb3ZpZGVyXG5ucHggQG1hcmlvemVjaG5lci9waS1haSBsaXN0ICAgICAgICAgICAgICAgIyBsaXN0IGF2YWlsYWJsZSBwcm92aWRlcnNcbmBgYFxuXG5DcmVkZW50aWFscyBhcmUgc2F2ZWQgdG8gYGF1dGguanNvbmAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuXG4jIyMgUHJvZ3JhbW1hdGljIE9BdXRoXG5cblRoZSBsaWJyYXJ5IHByb3ZpZGVzIGxvZ2luIGFuZCB0b2tlbiByZWZyZXNoIGZ1bmN0aW9ucy4gQ3JlZGVudGlhbCBzdG9yYWdlIGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS5cblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHtcbiAgLy8gTG9naW4gZnVuY3Rpb25zIChyZXR1cm4gY3JlZGVudGlhbHMsIGRvIG5vdCBzdG9yZSlcbiAgbG9naW5BbnRocm9waWMsXG4gIGxvZ2luT3BlbkFJQ29kZXgsXG4gIGxvZ2luR2l0SHViQ29waWxvdCxcbiAgbG9naW5HZW1pbmlDbGksXG4gIGxvZ2luQW50aWdyYXZpdHksXG5cbiAgLy8gVG9rZW4gbWFuYWdlbWVudFxuICByZWZyZXNoT0F1dGhUb2tlbiwgICAvLyAocHJvdmlkZXIsIGNyZWRlbnRpYWxzKSA9PiBuZXcgY3JlZGVudGlhbHNcbiAgZ2V0T0F1dGhBcGlLZXksICAgICAgLy8gKHByb3ZpZGVyLCBjcmVkZW50aWFsc01hcCkgPT4geyBuZXdDcmVkZW50aWFscywgYXBpS2V5IH0gfCBudWxsXG5cbiAgLy8gVHlwZXNcbiAgdHlwZSBPQXV0aFByb3ZpZGVyLCAgLy8gJ2FudGhyb3BpYycgfCAnb3BlbmFpLWNvZGV4JyB8ICdnaXRodWItY29waWxvdCcgfCAnZ29vZ2xlLWdlbWluaS1jbGknIHwgJ2dvb2dsZS1hbnRpZ3Jhdml0eSdcbiAgdHlwZSBPQXV0aENyZWRlbnRpYWxzLFxufSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcbmBgYFxuXG4jIyMgTG9naW4gRmxvdyBFeGFtcGxlXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGxvZ2luR2l0SHViQ29waWxvdCB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcblxuY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBsb2dpbkdpdEh1YkNvcGlsb3Qoe1xuICBvbkF1dGg6ICh1cmwsIGluc3RydWN0aW9ucykgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBPcGVuOiAke3VybH1gKTtcbiAgICBpZiAoaW5zdHJ1Y3Rpb25zKSBjb25zb2xlLmxvZyhpbnN0cnVjdGlvbnMpO1xuICB9LFxuICBvblByb21wdDogYXN5bmMgKHByb21wdCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBnZXRVc2VySW5wdXQocHJvbXB0Lm1lc3NhZ2UpO1xuICB9LFxuICBvblByb2dyZXNzOiAobWVzc2FnZSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSlcbn0pO1xuXG4vLyBTdG9yZSBjcmVkZW50aWFscyB5b3Vyc2VsZlxuY29uc3QgYXV0aCA9IHsgJ2dpdGh1Yi1jb3BpbG90JzogeyB0eXBlOiAnb2F1dGgnLCAuLi5jcmVkZW50aWFscyB9IH07XG53cml0ZUZpbGVTeW5jKCdhdXRoLmpzb24nLCBKU09OLnN0cmluZ2lmeShhdXRoLCBudWxsLCAyKSk7XG5gYGBcblxuIyMjIFVzaW5nIE9BdXRoIFRva2Vuc1xuXG5Vc2UgYGdldE9BdXRoQXBpS2V5KClgIHRvIGdldCBhbiBBUEkga2V5LCBhdXRvbWF0aWNhbGx5IHJlZnJlc2hpbmcgaWYgZXhwaXJlZDpcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0TW9kZWwsIGNvbXBsZXRlLCBnZXRPQXV0aEFwaUtleSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuXG4vLyBMb2FkIHlvdXIgc3RvcmVkIGNyZWRlbnRpYWxzXG5jb25zdCBhdXRoID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoJ2F1dGguanNvbicsICd1dGYtOCcpKTtcblxuLy8gR2V0IEFQSSBrZXkgKHJlZnJlc2hlcyBpZiBleHBpcmVkKVxuY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0T0F1dGhBcGlLZXkoJ2dpdGh1Yi1jb3BpbG90JywgYXV0aCk7XG5pZiAoIXJlc3VsdCkgdGhyb3cgbmV3IEVycm9yKCdOb3QgbG9nZ2VkIGluJyk7XG5cbi8vIFNhdmUgcmVmcmVzaGVkIGNyZWRlbnRpYWxzXG5hdXRoWydnaXRodWItY29waWxvdCddID0geyB0eXBlOiAnb2F1dGgnLCAuLi5yZXN1bHQubmV3Q3JlZGVudGlhbHMgfTtcbndyaXRlRmlsZVN5bmMoJ2F1dGguanNvbicsIEpTT04uc3RyaW5naWZ5KGF1dGgsIG51bGwsIDIpKTtcblxuLy8gVXNlIHRoZSBBUEkga2V5XG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdnaXRodWItY29waWxvdCcsICdncHQtNG8nKTtcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIHtcbiAgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ0hlbGxvIScgfV1cbn0sIHsgYXBpS2V5OiByZXN1bHQuYXBpS2V5IH0pO1xuYGBgXG5cbiMjIyBQcm92aWRlciBOb3Rlc1xuXG4qKk9wZW5BSSBDb2RleCoqOiBSZXF1aXJlcyBhIENoYXRHUFQgUGx1cyBvciBQcm8gc3Vic2NyaXB0aW9uLiBQcm92aWRlcyBhY2Nlc3MgdG8gR1BULTUueCBDb2RleCBtb2RlbHMgd2l0aCBleHRlbmRlZCBjb250ZXh0IHdpbmRvd3MgYW5kIHJlYXNvbmluZyBjYXBhYmlsaXRpZXMuIFRoZSBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBzZXNzaW9uLWJhc2VkIHByb21wdCBjYWNoaW5nIHdoZW4gYHNlc3Npb25JZGAgaXMgcHJvdmlkZWQgaW4gc3RyZWFtIG9wdGlvbnMuIFlvdSBjYW4gc2V0IGB0cmFuc3BvcnRgIGluIHN0cmVhbSBvcHRpb25zIHRvIGBcInNzZVwiYCwgYFwid2Vic29ja2V0XCJgLCBvciBgXCJhdXRvXCJgIGZvciBDb2RleCBSZXNwb25zZXMgdHJhbnNwb3J0IHNlbGVjdGlvbi4gV2hlbiB1c2luZyBXZWJTb2NrZXQgd2l0aCBhIGBzZXNzaW9uSWRgLCBjb25uZWN0aW9ucyBhcmUgcmV1c2VkIHBlciBzZXNzaW9uIGFuZCBleHBpcmUgYWZ0ZXIgNSBtaW51dGVzIG9mIGluYWN0aXZpdHkuXG5cbioqQXp1cmUgT3BlbkFJIChSZXNwb25zZXMpKio6IFVzZXMgdGhlIFJlc3BvbnNlcyBBUEkgb25seS4gU2V0IGBBWlVSRV9PUEVOQUlfQVBJX0tFWWAgYW5kIGVpdGhlciBgQVpVUkVfT1BFTkFJX0JBU0VfVVJMYCBvciBgQVpVUkVfT1BFTkFJX1JFU09VUkNFX05BTUVgLiBVc2UgYEFaVVJFX09QRU5BSV9BUElfVkVSU0lPTmAgKGRlZmF1bHRzIHRvIGB2MWApIHRvIG92ZXJyaWRlIHRoZSBBUEkgdmVyc2lvbiBpZiBuZWVkZWQuIERlcGxveW1lbnQgbmFtZXMgYXJlIHRyZWF0ZWQgYXMgbW9kZWwgSURzIGJ5IGRlZmF1bHQsIG92ZXJyaWRlIHdpdGggYGF6dXJlRGVwbG95bWVudE5hbWVgIG9yIGBBWlVSRV9PUEVOQUlfREVQTE9ZTUVOVF9OQU1FX01BUGAgdXNpbmcgY29tbWEtc2VwYXJhdGVkIGBtb2RlbC1pZD1kZXBsb3ltZW50YCBwYWlycyAoZm9yIGV4YW1wbGUgYGdwdC00by1taW5pPW15LWRlcGxveW1lbnQsZ3B0LTRvPXByb2RgKS4gTGVnYWN5IGRlcGxveW1lbnQtYmFzZWQgVVJMcyBhcmUgaW50ZW50aW9uYWxseSB1bnN1cHBvcnRlZC5cblxuKipHaXRIdWIgQ29waWxvdCoqOiBJZiB5b3UgZ2V0IFwiVGhlIHJlcXVlc3RlZCBtb2RlbCBpcyBub3Qgc3VwcG9ydGVkXCIgZXJyb3IsIGVuYWJsZSB0aGUgbW9kZWwgbWFudWFsbHkgaW4gVlMgQ29kZTogb3BlbiBDb3BpbG90IENoYXQsIGNsaWNrIHRoZSBtb2RlbCBzZWxlY3Rvciwgc2VsZWN0IHRoZSBtb2RlbCAod2FybmluZyBpY29uKSwgYW5kIGNsaWNrIFwiRW5hYmxlXCIuXG5cbioqR29vZ2xlIEdlbWluaSBDTEkgLyBBbnRpZ3Jhdml0eSoqOiBUaGVzZSB1c2UgR29vZ2xlIENsb3VkIE9BdXRoLiBUaGUgYGFwaUtleWAgcmV0dXJuZWQgYnkgYGdldE9BdXRoQXBpS2V5KClgIGlzIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBib3RoIHRoZSB0b2tlbiBhbmQgcHJvamVjdCBJRCwgd2hpY2ggdGhlIGxpYnJhcnkgaGFuZGxlcyBhdXRvbWF0aWNhbGx5LlxuXG4jIyBEZXZlbG9wbWVudFxuXG4jIyMgQWRkaW5nIGEgTmV3IFByb3ZpZGVyXG5cbkFkZGluZyBhIG5ldyBMTE0gcHJvdmlkZXIgcmVxdWlyZXMgY2hhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMuIFRoaXMgY2hlY2tsaXN0IGNvdmVycyBhbGwgbmVjZXNzYXJ5IHN0ZXBzOlxuXG4jIyMjIDEuIENvcmUgVHlwZXMgKGBzcmMvdHlwZXMudHNgKVxuXG4tIEFkZCB0aGUgQVBJIGlkZW50aWZpZXIgdG8gYEtub3duQXBpYCAoZm9yIGV4YW1wbGUgYFwiYmVkcm9jay1jb252ZXJzZS1zdHJlYW1cImApXG4tIENyZWF0ZSBhbiBvcHRpb25zIGludGVyZmFjZSBleHRlbmRpbmcgYFN0cmVhbU9wdGlvbnNgIChmb3IgZXhhbXBsZSBgQmVkcm9ja09wdGlvbnNgKVxuLSBBZGQgdGhlIHByb3ZpZGVyIG5hbWUgdG8gYEtub3duUHJvdmlkZXJgIChmb3IgZXhhbXBsZSBgXCJhbWF6b24tYmVkcm9ja1wiYClcblxuIyMjIyAyLiBQcm92aWRlciBJbXBsZW1lbnRhdGlvbiAoYHNyYy9wcm92aWRlcnMvYClcblxuQ3JlYXRlIGEgbmV3IHByb3ZpZGVyIGZpbGUgKGZvciBleGFtcGxlIGBhbWF6b24tYmVkcm9jay50c2ApIHRoYXQgZXhwb3J0czpcblxuLSBgc3RyZWFtPFByb3ZpZGVyPigpYCBmdW5jdGlvbiByZXR1cm5pbmcgYEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbWBcbi0gYHN0cmVhbVNpbXBsZTxQcm92aWRlcj4oKWAgZm9yIGBTaW1wbGVTdHJlYW1PcHRpb25zYCBtYXBwaW5nXG4tIFByb3ZpZGVyLXNwZWNpZmljIG9wdGlvbnMgaW50ZXJmYWNlXG4tIE1lc3NhZ2UgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gdHJhbnNmb3JtIGBDb250ZXh0YCB0byBwcm92aWRlciBmb3JtYXRcbi0gVG9vbCBjb252ZXJzaW9uIGlmIHRoZSBwcm92aWRlciBzdXBwb3J0cyB0b29sc1xuLSBSZXNwb25zZSBwYXJzaW5nIHRvIGVtaXQgc3RhbmRhcmRpemVkIGV2ZW50cyAoYHRleHRgLCBgdG9vbF9jYWxsYCwgYHRoaW5raW5nYCwgYHVzYWdlYCwgYHN0b3BgKVxuXG4jIyMjIDMuIEFQSSBSZWdpc3RyeSBJbnRlZ3JhdGlvbiAoYHNyYy9wcm92aWRlcnMvcmVnaXN0ZXItYnVpbHRpbnMudHNgKVxuXG4tIFJlZ2lzdGVyIHRoZSBBUEkgd2l0aCBgcmVnaXN0ZXJBcGlQcm92aWRlcigpYFxuLSBBZGQgY3JlZGVudGlhbCBkZXRlY3Rpb24gaW4gYGVudi1hcGkta2V5cy50c2AgZm9yIHRoZSBuZXcgcHJvdmlkZXJcbi0gRW5zdXJlIGBzdHJlYW1TaW1wbGVgIGhhbmRsZXMgYXV0aCBsb29rdXAgdmlhIGBnZXRFbnZBcGlLZXkoKWAgb3IgcHJvdmlkZXItc3BlY2lmaWMgYXV0aFxuXG4jIyMjIDQuIE1vZGVsIEdlbmVyYXRpb24gKGBzY3JpcHRzL2dlbmVyYXRlLW1vZGVscy50c2ApXG5cbi0gQWRkIGxvZ2ljIHRvIGZldGNoIGFuZCBwYXJzZSBtb2RlbHMgZnJvbSB0aGUgcHJvdmlkZXIncyBzb3VyY2UgKGUuZy4sIG1vZGVscy5kZXYgQVBJKVxuLSBNYXAgcHJvdmlkZXIgbW9kZWwgZGF0YSB0byB0aGUgc3RhbmRhcmRpemVkIGBNb2RlbGAgaW50ZXJmYWNlXG4tIEhhbmRsZSBwcm92aWRlci1zcGVjaWZpYyBxdWlya3MgKHByaWNpbmcgZm9ybWF0LCBjYXBhYmlsaXR5IGZsYWdzLCBtb2RlbCBJRCB0cmFuc2Zvcm1hdGlvbnMpXG5cbiMjIyMgNS4gVGVzdHMgKGB0ZXN0L2ApXG5cbkNyZWF0ZSBvciB1cGRhdGUgdGVzdCBmaWxlcyB0byBjb3ZlciB0aGUgbmV3IHByb3ZpZGVyOlxuXG4tIGBzdHJlYW0udGVzdC50c2AgLSBCYXNpYyBzdHJlYW1pbmcgYW5kIHRvb2wgdXNlXG4tIGB0b2tlbnMudGVzdC50c2AgLSBUb2tlbiB1c2FnZSByZXBvcnRpbmdcbi0gYGFib3J0LnRlc3QudHNgIC0gUmVxdWVzdCBjYW5jZWxsYXRpb25cbi0gYGVtcHR5LnRlc3QudHNgIC0gRW1wdHkgbWVzc2FnZSBoYW5kbGluZ1xuLSBgY29udGV4dC1vdmVyZmxvdy50ZXN0LnRzYCAtIENvbnRleHQgbGltaXQgZXJyb3JzXG4tIGBpbWFnZS1saW1pdHMudGVzdC50c2AgLSBJbWFnZSBzdXBwb3J0IChpZiBhcHBsaWNhYmxlKVxuLSBgdW5pY29kZS1zdXJyb2dhdGUudGVzdC50c2AgLSBVbmljb2RlIGhhbmRsaW5nXG4tIGB0b29sLWNhbGwtd2l0aG91dC1yZXN1bHQudGVzdC50c2AgLSBPcnBoYW5lZCB0b29sIGNhbGxzXG4tIGBpbWFnZS10b29sLXJlc3VsdC50ZXN0LnRzYCAtIEltYWdlcyBpbiB0b29sIHJlc3VsdHNcbi0gYHRvdGFsLXRva2Vucy50ZXN0LnRzYCAtIFRva2VuIGNvdW50aW5nIGFjY3VyYWN5XG4tIGBjcm9zcy1wcm92aWRlci1oYW5kb2ZmLnRlc3QudHNgIC0gQ3Jvc3MtcHJvdmlkZXIgY29udGV4dCByZXBsYXlcblxuRm9yIGBjcm9zcy1wcm92aWRlci1oYW5kb2ZmLnRlc3QudHNgLCBhZGQgYXQgbGVhc3Qgb25lIHByb3ZpZGVyL21vZGVsIHBhaXIuIElmIHRoZSBwcm92aWRlciBleHBvc2VzIG11bHRpcGxlIG1vZGVsIGZhbWlsaWVzIChmb3IgZXhhbXBsZSBHUFQgYW5kIENsYXVkZSksIGFkZCBhdCBsZWFzdCBvbmUgcGFpciBwZXIgZmFtaWx5LlxuXG5Gb3IgcHJvdmlkZXJzIHdpdGggbm9uLXN0YW5kYXJkIGF1dGggKEFXUywgR29vZ2xlIFZlcnRleCksIGNyZWF0ZSBhIHV0aWxpdHkgbGlrZSBgYmVkcm9jay11dGlscy50c2Agd2l0aCBjcmVkZW50aWFsIGRldGVjdGlvbiBoZWxwZXJzLlxuXG4jIyMjIDYuIENvZGluZyBBZ2VudCBJbnRlZ3JhdGlvbiAoYC4uL2NvZGluZy1hZ2VudC9gKVxuXG5VcGRhdGUgYHNyYy9jb3JlL21vZGVsLXJlc29sdmVyLnRzYDpcblxuLSBBZGQgYSBkZWZhdWx0IG1vZGVsIElEIGZvciB0aGUgcHJvdmlkZXIgaW4gYERFRkFVTFRfTU9ERUxTYFxuXG5VcGRhdGUgYHNyYy9jbGkvYXJncy50c2A6XG5cbi0gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlIGRvY3VtZW50YXRpb24gaW4gdGhlIGhlbHAgdGV4dFxuXG5VcGRhdGUgYFJFQURNRS5tZGA6XG5cbi0gQWRkIHRoZSBwcm92aWRlciB0byB0aGUgcHJvdmlkZXJzIHNlY3Rpb24gd2l0aCBzZXR1cCBpbnN0cnVjdGlvbnNcblxuIyMjIyA3LiBEb2N1bWVudGF0aW9uXG5cblVwZGF0ZSBgcGFja2FnZXMvYWkvUkVBRE1FLm1kYDpcblxuLSBBZGQgdG8gdGhlIFN1cHBvcnRlZCBQcm92aWRlcnMgdGFibGVcbi0gRG9jdW1lbnQgYW55IHByb3ZpZGVyLXNwZWNpZmljIG9wdGlvbnMgb3IgYXV0aGVudGljYXRpb24gcmVxdWlyZW1lbnRzXG4tIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgRW52aXJvbm1lbnQgVmFyaWFibGVzIHNlY3Rpb25cblxuIyMjIyA4LiBDaGFuZ2Vsb2dcblxuQWRkIGFuIGVudHJ5IHRvIGBwYWNrYWdlcy9haS9DSEFOR0VMT0cubWRgIHVuZGVyIGAjIyBbVW5yZWxlYXNlZF1gOlxuXG5gYGBtYXJrZG93blxuIyMjIEFkZGVkXG4tIEFkZGVkIHN1cHBvcnQgZm9yIFtQcm92aWRlciBOYW1lXSBwcm92aWRlciAoWyNQUl0obGluaykgYnkgW0BhdXRob3JdKGxpbmspKVxuYGBgXG5cbiMjIExpY2Vuc2VcblxuTUlUXG5cbmBgYFxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haS9SRUFETUUubWQiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3Mjk1MzE3LCJlbmRlZEF0IjoxNzcxMzQ3Mjk1NTgwLCJkdXJhdGlvbk1zIjoyNjN9fX19LCJlbmRlZEF0IjoxNzcxMzQ3Mjk1NTgzLCJkdXJhdGlvbk1zIjoyNjJ9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDE0VEJiOHdnVlVMQ2Z4eGFiMVJ4cUo2IiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDcyOTU1ODQsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIHByb3ZpZGVycy5tZFxuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Byb3ZpZGVycy5tZGBcbioqU2l6ZToqKiA1OTQ4IGJ5dGVzXG5cbmBgYG1hcmtkb3duXG4jIFByb3ZpZGVyc1xuXG5QaSBzdXBwb3J0cyBzdWJzY3JpcHRpb24tYmFzZWQgcHJvdmlkZXJzIHZpYSBPQXV0aCBhbmQgQVBJIGtleSBwcm92aWRlcnMgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBhdXRoIGZpbGUuIEZvciBlYWNoIHByb3ZpZGVyLCBwaSBrbm93cyBhbGwgYXZhaWxhYmxlIG1vZGVscy4gVGhlIGxpc3QgaXMgdXBkYXRlZCB3aXRoIGV2ZXJ5IHBpIHJlbGVhc2UuXG5cbiMjIFRhYmxlIG9mIENvbnRlbnRzXG5cbi0gW1N1YnNjcmlwdGlvbnNdKCNzdWJzY3JpcHRpb25zKVxuLSBbQVBJIEtleXNdKCNhcGkta2V5cylcbi0gW0F1dGggRmlsZV0oI2F1dGgtZmlsZSlcbi0gW0Nsb3VkIFByb3ZpZGVyc10oI2Nsb3VkLXByb3ZpZGVycylcbi0gW0N1c3RvbSBQcm92aWRlcnNdKCNjdXN0b20tcHJvdmlkZXJzKVxuLSBbUmVzb2x1dGlvbiBPcmRlcl0oI3Jlc29sdXRpb24tb3JkZXIpXG5cbiMjIFN1YnNjcmlwdGlvbnNcblxuVXNlIGAvbG9naW5gIGluIGludGVyYWN0aXZlIG1vZGUsIHRoZW4gc2VsZWN0IGEgcHJvdmlkZXI6XG5cbi0gQ2xhdWRlIFByby9NYXhcbi0gQ2hhdEdQVCBQbHVzL1BybyAoQ29kZXgpXG4tIEdpdEh1YiBDb3BpbG90XG4tIEdvb2dsZSBHZW1pbmkgQ0xJXG4tIEdvb2dsZSBBbnRpZ3Jhdml0eVxuXG5Vc2UgYC9sb2dvdXRgIHRvIGNsZWFyIGNyZWRlbnRpYWxzLiBUb2tlbnMgYXJlIHN0b3JlZCBpbiBgfi8ucGkvYWdlbnQvYXV0aC5qc29uYCBhbmQgYXV0by1yZWZyZXNoIHdoZW4gZXhwaXJlZC5cblxuIyMjIEdpdEh1YiBDb3BpbG90XG5cbi0gUHJlc3MgRW50ZXIgZm9yIGdpdGh1Yi5jb20sIG9yIGVudGVyIHlvdXIgR2l0SHViIEVudGVycHJpc2UgU2VydmVyIGRvbWFpblxuLSBJZiB5b3UgZ2V0IFwibW9kZWwgbm90IHN1cHBvcnRlZFwiLCBlbmFibGUgaXQgaW4gVlMgQ29kZTogQ29waWxvdCBDaGF0IOKGkiBtb2RlbCBzZWxlY3RvciDihpIgc2VsZWN0IG1vZGVsIOKGkiBcIkVuYWJsZVwiXG5cbiMjIyBHb29nbGUgUHJvdmlkZXJzXG5cbi0gKipHZW1pbmkgQ0xJKio6IFN0YW5kYXJkIEdlbWluaSBtb2RlbHMgdmlhIENsb3VkIENvZGUgQXNzaXN0XG4tICoqQW50aWdyYXZpdHkqKjogU2FuZGJveCB3aXRoIEdlbWluaSAzLCBDbGF1ZGUsIGFuZCBHUFQtT1NTIG1vZGVsc1xuLSBCb3RoIGZyZWUgd2l0aCBhbnkgR29vZ2xlIGFjY291bnQsIHN1YmplY3QgdG8gcmF0ZSBsaW1pdHNcbi0gRm9yIHBhaWQgQ2xvdWQgQ29kZSBBc3Npc3Q6IHNldCBgR09PR0xFX0NMT1VEX1BST0pFQ1RgIGVudiB2YXJcblxuIyMjIE9wZW5BSSBDb2RleFxuXG4tIFJlcXVpcmVzIENoYXRHUFQgUGx1cyBvciBQcm8gc3Vic2NyaXB0aW9uXG4tIFBlcnNvbmFsIHVzZSBvbmx5OyBmb3IgcHJvZHVjdGlvbiwgdXNlIHRoZSBPcGVuQUkgUGxhdGZvcm0gQVBJXG5cbiMjIEFQSSBLZXlzXG5cbiMjIyBFbnZpcm9ubWVudCBWYXJpYWJsZXMgb3IgQXV0aCBGaWxlXG5cblNldCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGU6XG5cbmBgYGJhc2hcbmV4cG9ydCBBTlRIUk9QSUNfQVBJX0tFWT1zay1hbnQtLi4uXG5waVxuYGBgXG5cbnwgUHJvdmlkZXIgfCBFbnZpcm9ubWVudCBWYXJpYWJsZSB8IGBhdXRoLmpzb25gIGtleSB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXxcbnwgQW50aHJvcGljIHwgYEFOVEhST1BJQ19BUElfS0VZYCB8IGBhbnRocm9waWNgIHxcbnwgQXp1cmUgT3BlbkFJIFJlc3BvbnNlcyB8IGBBWlVSRV9PUEVOQUlfQVBJX0tFWWAgfCBgYXp1cmUtb3BlbmFpLXJlc3BvbnNlc2AgfFxufCBPcGVuQUkgfCBgT1BFTkFJX0FQSV9LRVlgIHwgYG9wZW5haWAgfFxufCBHb29nbGUgR2VtaW5pIHwgYEdFTUlOSV9BUElfS0VZYCB8IGBnb29nbGVgIHxcbnwgTWlzdHJhbCB8IGBNSVNUUkFMX0FQSV9LRVlgIHwgYG1pc3RyYWxgIHxcbnwgR3JvcSB8IGBHUk9RX0FQSV9LRVlgIHwgYGdyb3FgIHxcbnwgQ2VyZWJyYXMgfCBgQ0VSRUJSQVNfQVBJX0tFWWAgfCBgY2VyZWJyYXNgIHxcbnwgeEFJIHwgYFhBSV9BUElfS0VZYCB8IGB4YWlgIHxcbnwgT3BlblJvdXRlciB8IGBPUEVOUk9VVEVSX0FQSV9LRVlgIHwgYG9wZW5yb3V0ZXJgIHxcbnwgVmVyY2VsIEFJIEdhdGV3YXkgfCBgQUlfR0FURVdBWV9BUElfS0VZYCB8IGB2ZXJjZWwtYWktZ2F0ZXdheWAgfFxufCBaQUkgfCBgWkFJX0FQSV9LRVlgIHwgYHphaWAgfFxufCBPcGVuQ29kZSBaZW4gfCBgT1BFTkNPREVfQVBJX0tFWWAgfCBgb3BlbmNvZGVgIHxcbnwgSHVnZ2luZyBGYWNlIHwgYEhGX1RPS0VOYCB8IGBodWdnaW5nZmFjZWAgfFxufCBLaW1pIEZvciBDb2RpbmcgfCBgS0lNSV9BUElfS0VZYCB8IGBraW1pLWNvZGluZ2AgfFxufCBNaW5pTWF4IHwgYE1JTklNQVhfQVBJX0tFWWAgfCBgbWluaW1heGAgfFxufCBNaW5pTWF4IChDaGluYSkgfCBgTUlOSU1BWF9DTl9BUElfS0VZYCB8IGBtaW5pbWF4LWNuYCB8XG5cblJlZmVyZW5jZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBgYXV0aC5qc29uYCBrZXlzOiBbYGNvbnN0IGVudk1hcGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvZW52LWFwaS1rZXlzLnRzKSBpbiBbYHBhY2thZ2VzL2FpL3NyYy9lbnYtYXBpLWtleXMudHNgXShodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvc3JjL2Vudi1hcGkta2V5cy50cykuXG5cbiMjIyMgQXV0aCBGaWxlXG5cblN0b3JlIGNyZWRlbnRpYWxzIGluIGB+Ly5waS9hZ2VudC9hdXRoLmpzb25gOlxuXG5gYGBqc29uXG57XG4gIFwiYW50aHJvcGljXCI6IHsgXCJ0eXBlXCI6IFwiYXBpX2tleVwiLCBcImtleVwiOiBcInNrLWFudC0uLi5cIiB9LFxuICBcIm9wZW5haVwiOiB7IFwidHlwZVwiOiBcImFwaV9rZXlcIiwgXCJrZXlcIjogXCJzay0uLi5cIiB9LFxuICBcImdvb2dsZVwiOiB7IFwidHlwZVwiOiBcImFwaV9rZXlcIiwgXCJrZXlcIjogXCIuLi5cIiB9LFxuICBcIm9wZW5jb2RlXCI6IHsgXCJ0eXBlXCI6IFwiYXBpX2tleVwiLCBcImtleVwiOiBcIi4uLlwiIH1cbn1cbmBgYFxuXG5UaGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggYDA2MDBgIHBlcm1pc3Npb25zICh1c2VyIHJlYWQvd3JpdGUgb25seSkuIEF1dGggZmlsZSBjcmVkZW50aWFscyB0YWtlIHByaW9yaXR5IG92ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXG4jIyMgS2V5IFJlc29sdXRpb25cblxuVGhlIGBrZXlgIGZpZWxkIHN1cHBvcnRzIHRocmVlIGZvcm1hdHM6XG5cbi0gKipTaGVsbCBjb21tYW5kOioqIGBcIiFjb21tYW5kXCJgIGV4ZWN1dGVzIGFuZCB1c2VzIHN0ZG91dCAoY2FjaGVkIGZvciBwcm9jZXNzIGxpZmV0aW1lKVxuICBgYGBqc29uXG4gIHsgXCJ0eXBlXCI6IFwiYXBpX2tleVwiLCBcImtleVwiOiBcIiFzZWN1cml0eSBmaW5kLWdlbmVyaWMtcGFzc3dvcmQgLXdzICdhbnRocm9waWMnXCIgfVxuICB7IFwidHlwZVwiOiBcImFwaV9rZXlcIiwgXCJrZXlcIjogXCIhb3AgcmVhZCAnb3A6Ly92YXVsdC9pdGVtL2NyZWRlbnRpYWwnXCIgfVxuICBgYGBcbi0gKipFbnZpcm9ubWVudCB2YXJpYWJsZToqKiBVc2VzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgdmFyaWFibGVcbiAgYGBganNvblxuICB7IFwidHlwZVwiOiBcImFwaV9rZXlcIiwgXCJrZXlcIjogXCJNWV9BTlRIUk9QSUNfS0VZXCIgfVxuICBgYGBcbi0gKipMaXRlcmFsIHZhbHVlOioqIFVzZWQgZGlyZWN0bHlcbiAgYGBganNvblxuICB7IFwidHlwZVwiOiBcImFwaV9rZXlcIiwgXCJrZXlcIjogXCJzay1hbnQtLi4uXCIgfVxuICBgYGBcblxuT0F1dGggY3JlZGVudGlhbHMgYXJlIGFsc28gc3RvcmVkIGhlcmUgYWZ0ZXIgYC9sb2dpbmAgYW5kIG1hbmFnZWQgYXV0b21hdGljYWxseS5cblxuIyMgQ2xvdWQgUHJvdmlkZXJzXG5cbiMjIyBBenVyZSBPcGVuQUlcblxuYGBgYmFzaFxuZXhwb3J0IEFaVVJFX09QRU5BSV9BUElfS0VZPS4uLlxuZXhwb3J0IEFaVVJFX09QRU5BSV9CQVNFX1VSTD1odHRwczovL3lvdXItcmVzb3VyY2Uub3BlbmFpLmF6dXJlLmNvbVxuIyBvciB1c2UgcmVzb3VyY2UgbmFtZSBpbnN0ZWFkIG9mIGJhc2UgVVJMXG5leHBvcnQgQVpVUkVfT1BFTkFJX1JFU09VUkNFX05BTUU9eW91ci1yZXNvdXJjZVxuXG4jIE9wdGlvbmFsXG5leHBvcnQgQVpVUkVfT1BFTkFJX0FQSV9WRVJTSU9OPTIwMjQtMDItMDFcbmV4cG9ydCBBWlVSRV9PUEVOQUlfREVQTE9ZTUVOVF9OQU1FX01BUD1ncHQtND1teS1ncHQ0LGdwdC00bz1teS1ncHQ0b1xuYGBgXG5cbiMjIyBBbWF6b24gQmVkcm9ja1xuXG5gYGBiYXNoXG4jIE9wdGlvbiAxOiBBV1MgUHJvZmlsZVxuZXhwb3J0IEFXU19QUk9GSUxFPXlvdXItcHJvZmlsZVxuXG4jIE9wdGlvbiAyOiBJQU0gS2V5c1xuZXhwb3J0IEFXU19BQ0NFU1NfS0VZX0lEPUFLSUEuLi5cbmV4cG9ydCBBV1NfU0VDUkVUX0FDQ0VTU19LRVk9Li4uXG5cbiMgT3B0aW9uIDM6IEJlYXJlciBUb2tlblxuZXhwb3J0IEFXU19CRUFSRVJfVE9LRU5fQkVEUk9DSz0uLi5cblxuIyBPcHRpb25hbCByZWdpb24gKGRlZmF1bHRzIHRvIHVzLWVhc3QtMSlcbmV4cG9ydCBBV1NfUkVHSU9OPXVzLXdlc3QtMlxuYGBgXG5cbkFsc28gc3VwcG9ydHMgRUNTIHRhc2sgcm9sZXMgKGBBV1NfQ09OVEFJTkVSX0NSRURFTlRJQUxTXypgKSBhbmQgSVJTQSAoYEFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRWApLlxuXG5gYGBiYXNoXG5waSAtLXByb3ZpZGVyIGFtYXpvbi1iZWRyb2NrIC0tbW9kZWwgdXMuYW50aHJvcGljLmNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNC12MTowXG5gYGBcblxuSWYgeW91IGFyZSBjb25uZWN0aW5nIHRvIGEgQmVkcm9jayBBUEkgcHJveHksIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSB1c2VkOlxuXG5gYGBiYXNoXG4jIFNldCB0aGUgVVJMIGZvciB0aGUgQmVkcm9jayBwcm94eSAoc3RhbmRhcmQgQVdTIFNESyBlbnYgdmFyKVxuZXhwb3J0IEFXU19FTkRQT0lOVF9VUkxfQkVEUk9DS19SVU5USU1FPWh0dHBzOi8vbXkuY29ycC5wcm94eS9iZWRyb2NrXG5cbiMgU2V0IGlmIHlvdXIgcHJveHkgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvblxuZXhwb3J0IEFXU19CRURST0NLX1NLSVBfQVVUSD0xXG5cbiMgU2V0IGlmIHlvdXIgcHJveHkgb25seSBzdXBwb3J0cyBIVFRQLzEuMVxuZXhwb3J0IEFXU19CRURST0NLX0ZPUkNFX0hUVFAxPTFcbmBgYFxuXG4jIyMgR29vZ2xlIFZlcnRleCBBSVxuXG5Vc2VzIEFwcGxpY2F0aW9uIERlZmF1bHQgQ3JlZGVudGlhbHM6XG5cbmBgYGJhc2hcbmdjbG91ZCBhdXRoIGFwcGxpY2F0aW9uLWRlZmF1bHQgbG9naW5cbmV4cG9ydCBHT09HTEVfQ0xPVURfUFJPSkVDVD15b3VyLXByb2plY3RcbmV4cG9ydCBHT09HTEVfQ0xPVURfTE9DQVRJT049dXMtY2VudHJhbDFcbmBgYFxuXG5PciBzZXQgYEdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMU2AgdG8gYSBzZXJ2aWNlIGFjY291bnQga2V5IGZpbGUuXG5cbiMjIEN1c3RvbSBQcm92aWRlcnNcblxuKipWaWEgbW9kZWxzLmpzb246KiogQWRkIE9sbGFtYSwgTE0gU3R1ZGlvLCB2TExNLCBvciBhbnkgcHJvdmlkZXIgdGhhdCBzcGVha3MgYSBzdXBwb3J0ZWQgQVBJIChPcGVuQUkgQ29tcGxldGlvbnMsIE9wZW5BSSBSZXNwb25zZXMsIEFudGhyb3BpYyBNZXNzYWdlcywgR29vZ2xlIEdlbmVyYXRpdmUgQUkpLiBTZWUgW21vZGVscy5tZF0obW9kZWxzLm1kKS5cblxuKipWaWEgZXh0ZW5zaW9uczoqKiBGb3IgcHJvdmlkZXJzIHRoYXQgbmVlZCBjdXN0b20gQVBJIGltcGxlbWVudGF0aW9ucyBvciBPQXV0aCBmbG93cywgY3JlYXRlIGFuIGV4dGVuc2lvbi4gU2VlIFtjdXN0b20tcHJvdmlkZXIubWRdKGN1c3RvbS1wcm92aWRlci5tZCkgYW5kIFtleGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1naXRsYWItZHVvXSguLi9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1naXRsYWItZHVvLykuXG5cbiMjIFJlc29sdXRpb24gT3JkZXJcblxuV2hlbiByZXNvbHZpbmcgY3JlZGVudGlhbHMgZm9yIGEgcHJvdmlkZXI6XG5cbjEuIENMSSBgLS1hcGkta2V5YCBmbGFnXG4yLiBgYXV0aC5qc29uYCBlbnRyeSAoQVBJIGtleSBvciBPQXV0aCB0b2tlbilcbjMuIEVudmlyb25tZW50IHZhcmlhYmxlXG40LiBDdXN0b20gcHJvdmlkZXIga2V5cyBmcm9tIGBtb2RlbHMuanNvbmBcblxuYGBgXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Byb3ZpZGVycy5tZCIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJmaWxlIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDcyOTU1ODEsImVuZGVkQXQiOjE3NzEzNDcyOTU5OTIsImR1cmF0aW9uTXMiOjQxMX19fX0sImVuZGVkQXQiOjE3NzEzNDcyOTU5OTQsImR1cmF0aW9uTXMiOjQxMH1dLCJyZXNwb25zZSI6IlBlcmZlY3QhIE5vdyBJIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgYW5zd2VyLiBMZXQgbWUgY29tcGlsZSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcHJvdmlkZXJzLlxuXG4jIyBTdW1tYXJ5XG5cbkJhc2VkIG9uIG15IGV4cGxvcmF0aW9uIG9mIHRoZSAqKmJhZGxvZ2ljL3BpLW1vbm8qKiByZXBvc2l0b3J5LCBoZXJlIGFyZSBhbGwgdGhlICoqYnVpbHQtaW4gcHJvdmlkZXJzKiogc3VwcG9ydGVkIGJ5IHBpOlxuXG4jIyMgQnVpbHQtaW4gUHJvdmlkZXJzICgyMiB0b3RhbClcblxuVGhlIGNvbXBsZXRlIGxpc3Qgb2YgYEtub3duUHJvdmlkZXJgIHR5cGVzIGRlZmluZWQgaW4gW2BwYWNrYWdlcy9haS9zcmMvdHlwZXMudHNgXShodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzI0wxNC1MMzYpOlxuXG4xLiAqKmBhbWF6b24tYmVkcm9ja2AqKiAtIEFXUyBCZWRyb2NrIChBbnRocm9waWMsIE1ldGEgbW9kZWxzKVxuMi4gKipgYW50aHJvcGljYCoqIC0gQW50aHJvcGljIChDbGF1ZGUgbW9kZWxzKVxuMy4gKipgZ29vZ2xlYCoqIC0gR29vZ2xlIEdlbmVyYXRpdmUgQUkgKEdlbWluaSBtb2RlbHMpXG40LiAqKmBnb29nbGUtZ2VtaW5pLWNsaWAqKiAtIEdvb2dsZSBDbG91ZCBDb2RlIEFzc2lzdCAoT0F1dGggcmVxdWlyZWQpXG41LiAqKmBnb29nbGUtYW50aWdyYXZpdHlgKiogLSBHb29nbGUgQW50aWdyYXZpdHkgKEZyZWUvcGFpZCBHZW1pbmksIENsYXVkZSwgR1BULU9TUylcbjYuICoqYGdvb2dsZS12ZXJ0ZXhgKiogLSBHb29nbGUgVmVydGV4IEFJXG43LiAqKmBvcGVuYWlgKiogLSBPcGVuQUkgKEdQVCBtb2RlbHMpXG44LiAqKmBhenVyZS1vcGVuYWktcmVzcG9uc2VzYCoqIC0gQXp1cmUgT3BlbkFJXG45LiAqKmBvcGVuYWktY29kZXhgKiogLSBPcGVuQUkgQ29kZXggKHJlcXVpcmVzIE9BdXRoKVxuMTAuICoqYGdpdGh1Yi1jb3BpbG90YCoqIC0gR2l0SHViIENvcGlsb3QgKHJlcXVpcmVzIE9BdXRoKVxuMTEuICoqYHhhaWAqKiAtIHhBSSAoR3JvayBtb2RlbHMpXG4xMi4gKipgZ3JvcWAqKiAtIEdyb3FcbjEzLiAqKmBjZXJlYnJhc2AqKiAtIENlcmVicmFzXG4xNC4gKipgb3BlbnJvdXRlcmAqKiAtIE9wZW5Sb3V0ZXIgKHJvdXRpbmcgc2VydmljZSlcbjE1LiAqKmB2ZXJjZWwtYWktZ2F0ZXdheWAqKiAtIFZlcmNlbCBBSSBHYXRld2F5XG4xNi4gKipgemFpYCoqIC0gekFJXG4xNy4gKipgbWlzdHJhbGAqKiAtIE1pc3RyYWxcbjE4LiAqKmBtaW5pbWF4YCoqIC0gTWluaU1heFxuMTkuICoqYG1pbmltYXgtY25gKiogLSBNaW5pTWF4IChDaGluYSlcbjIwLiAqKmBodWdnaW5nZmFjZWAqKiAtIEh1Z2dpbmcgRmFjZVxuMjEuICoqYG9wZW5jb2RlYCoqIC0gT3BlbkNvZGUgWmVuXG4yMi4gKipga2ltaS1jb2RpbmdgKiogLSBLaW1pIEZvciBDb2RpbmcgKE1vb25zaG90IEFJKVxuXG4jIyMgQnVpbHQtaW4gQVBJc1xuXG5UaGUgdW5kZXJseWluZyBBUEkgaW1wbGVtZW50YXRpb25zIHJlZ2lzdGVyZWQgaW4gW2BwYWNrYWdlcy9haS9zcmMvcHJvdmlkZXJzL3JlZ2lzdGVyLWJ1aWx0aW5zLnRzYF0oaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9wcm92aWRlcnMvcmVnaXN0ZXItYnVpbHRpbnMudHMpOlxuXG4xLiAqKmBhbnRocm9waWMtbWVzc2FnZXNgKiogLSBBbnRocm9waWMgTWVzc2FnZXMgQVBJXG4yLiAqKmBvcGVuYWktY29tcGxldGlvbnNgKiogLSBPcGVuQUkgQ2hhdCBDb21wbGV0aW9ucyAobW9zdCBjb21wYXRpYmxlKVxuMy4gKipgb3BlbmFpLXJlc3BvbnNlc2AqKiAtIE9wZW5BSSBSZXNwb25zZXMgQVBJXG40LiAqKmBhenVyZS1vcGVuYWktcmVzcG9uc2VzYCoqIC0gQXp1cmUgT3BlbkFJIFJlc3BvbnNlcyBBUElcbjUuICoqYG9wZW5haS1jb2RleC1yZXNwb25zZXNgKiogLSBPcGVuQUkgQ29kZXggUmVzcG9uc2VzIEFQSVxuNi4gKipgZ29vZ2xlLWdlbmVyYXRpdmUtYWlgKiogLSBHb29nbGUgR2VuZXJhdGl2ZSBBSSBBUElcbjcuICoqYGdvb2dsZS1nZW1pbmktY2xpYCoqIC0gR29vZ2xlIEdlbWluaSBDTEkgQVBJXG44LiAqKmBnb29nbGUtdmVydGV4YCoqIC0gR29vZ2xlIFZlcnRleCBBSSBBUElcbjkuICoqYGJlZHJvY2stY29udmVyc2Utc3RyZWFtYCoqIC0gQW1hem9uIEJlZHJvY2sgQ29udmVyc2UgQVBJXG5cbiMjIyBQcm92aWRlciBSZWdpc3RyYXRpb25cblxuUHJvdmlkZXJzIGNhbiBiZSByZWdpc3RlcmVkIGR5bmFtaWNhbGx5IHVzaW5nIHRoZSBgcmVnaXN0ZXJQcm92aWRlcigpYCBtZXRob2QgaW4gdGhlIFtgTW9kZWxSZWdpc3RyeWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvbW9kZWwtcmVnaXN0cnkudHMjTDI0My1MMzIyKSBjbGFzczpcblxuYGBgdHlwZXNjcmlwdFxubW9kZWxSZWdpc3RyeS5yZWdpc3RlclByb3ZpZGVyKHByb3ZpZGVyTmFtZSwge1xuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICBhcGlLZXk6ICdzay0uLi4nLFxuICBtb2RlbHM6IFsvKiBjdXN0b20gbW9kZWxzICovXSxcbiAgb2F1dGg6IHsgLyogT0F1dGggY29uZmlnICovIH1cbn0pO1xuYGBgXG5cbiMjIyBDdXN0b20gUHJvdmlkZXJzXG5cblVzZXJzIGNhbiBhZGQgY3VzdG9tIHByb3ZpZGVycyB2aWE6XG4tICoqYG1vZGVscy5qc29uYCoqIC0gRm9yIE9wZW5BSS1jb21wYXRpYmxlIEFQSXMgKE9sbGFtYSwgdkxMTSwgTE0gU3R1ZGlvKVxuLSAqKkV4dGVuc2lvbnMqKiAtIEZvciBjdXN0b20gQVBJIGltcGxlbWVudGF0aW9ucyBvciBPQXV0aCBmbG93c1xuXG5TZWUgW2N1c3RvbS1wcm92aWRlci5tZF0oaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2N1c3RvbS1wcm92aWRlci5tZCkgZm9yIGRldGFpbHMuIiwidXNhZ2UiOnsiaW5wdXRUb2tlbnMiOjk0MjgyLCJvdXRwdXRUb2tlbnMiOjI2OTEsImNhY2hlUmVhZFRva2VucyI6MjUyMjQ2LCJjYWNoZVdyaXRlVG9rZW5zIjowLCJlc3RpbWF0ZWRUb2tlbnMiOjM0OTIxOSwibGxtQ29zdCI6MC4xMzI5NjE1OTk5OTk5OTk5OSwidG9vbENvc3QiOjAsInRvdGFsQ29zdCI6MC4xMzI5NjE1OTk5OTk5OTk5OX0sInJlc29sdmVkTW9kZWwiOnsicHJvdmlkZXIiOiJvcGVucm91dGVyIiwiaWQiOiJhbnRocm9waWMvY2xhdWRlLWhhaWt1LTQuNSJ9LCJ0b3RhbER1cmF0aW9uTXMiOjU1MTg5fSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzMwNDQyMH19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKGJhc2gpIn0sImlkIjoiMmE4YWQ3NGEiLCJwYXJlbnRJZCI6IjkyYzU1NWQ1IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NToxMS42NTFaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYjcxY2U1NjEiLCJwYXJlbnRJZCI6IjJhOGFkNzRhIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NToxMS42NTFaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiTm93IEkgaGF2ZSBldmVyeXRoaW5nIEkgbmVlZC4gTGV0IG1lIGFsc28gcXVpY2tseSBjaGVjayB0aGUgYHJlZ2lzdGVyUHJvdmlkZXJgIHNpZ25hdHVyZSBmcm9tIHRoZSBleHRlbnNpb24gQVBJOiJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMUVtcHNVamUyR1RDU1pmYW9OWmJaa2IiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZ3JlcCAtQSAxMCBcInJlZ2lzdGVyUHJvdmlkZXJcIiAvVXNlcnMvYWxpb3VkaWFsbG8vdG1wLzIwMjYtMDItMTctcGktYXBlcnR1cmUvaW5kZXgudHMifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxRERUQk1URzM2Y0ZubmRFRzlYWlNvWSIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvdmFyL2ZvbGRlcnMvW1JFREFDVEVEXS9UL3BpLWV4dGVuc2lvbnMvbnBtL2YzNWIyMTI5L25vZGVfbW9kdWxlcy9AYWxpb3UvcGktZXh0ZW5zaW9uLWRldi9za2lsbHMvcGktZXh0ZW5zaW9uL3JlZmVyZW5jZXMvcHJvdmlkZXJzLm1kIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjIxNCwiY2FjaGVSZWFkIjozODIyMiwiY2FjaGVXcml0ZSI6MTE0MiwidG90YWxUb2tlbnMiOjM5NTc5LCJjb3N0Ijp7ImlucHV0IjowLjAwMDAwNSwib3V0cHV0IjowLjAwNTM1MDAwMDAwMDAwMDAwMSwiY2FjaGVSZWFkIjowLjAxOTExMSwiY2FjaGVXcml0ZSI6MC4wMDcxMzc1MDAwMDAwMDAwMDEsInRvdGFsIjowLjAzMTYwMzV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDczMDQ0MjJ9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChyZWFkKSJ9LCJpZCI6IjdlODFjNWQ4IiwicGFyZW50SWQiOiJiNzFjZTU2MSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTU6MTEuNjY5WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImUxM2YyM2FlIiwicGFyZW50SWQiOiI3ZTgxYzVkOCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTU6MTEuNjY5WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDFFbXBzVWplMkdUQ1NaZmFvTlpiWmtiIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICBwaS5yZWdpc3RlclByb3ZpZGVyKFwib3BlbnJvdXRlclwiLCB7XG4gICAgYmFzZVVybDogXCJodHRwOi8vYWkudGV0cmEtYWxiYWNvcmUudHMubmV0L3YxXCIsXG4gICAgYXBpS2V5OiBcIi1cIixcbiAgfSk7XG59XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDczMTE2Njh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI2ZjU0NGM3NiIsInBhcmVudElkIjoiZTEzZjIzYWUiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjU1OjExLjY3NloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxRERUQk1URzM2Y0ZubmRFRzlYWlNvWSIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgUHJvdmlkZXJzXG5cblByb3ZpZGVycyBhZGQgTExNIGJhY2tlbmRzIHRvIHBpLiBUaGV5IGNvbm5lY3QgcGkgdG8gbW9kZWwgQVBJcyAoT3BlbkFJLWNvbXBhdGlibGUgb3IgY3VzdG9tKS5cblxuIyMgUmVnaXN0cmF0aW9uXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IFR5cGUsIHR5cGUgRXh0ZW5zaW9uQVBJLCB0eXBlIFByb3ZpZGVyRGVmaW5pdGlvbiB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiO1xuXG5jb25zdCBteVByb3ZpZGVyOiBQcm92aWRlckRlZmluaXRpb24gPSB7XG4gIG5hbWU6IFwibXktcHJvdmlkZXJcIixcbiAgbW9kZWxzOiAoKSA9PiB7XG4gICAgY29uc3QgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuTVlfQVBJX0tFWTtcbiAgICBpZiAoIWFwaUtleSkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwibXktcHJvdmlkZXIvbW9kZWwtbmFtZVwiLFxuICAgICAgICBuYW1lOiBcIk1vZGVsIE5hbWVcIixcbiAgICAgICAgcHJvdmlkZXI6IFwibXktcHJvdmlkZXJcIixcbiAgICAgICAgY2FuU3RyZWFtOiB0cnVlLFxuICAgICAgICBjb250ZXh0TGVuZ3RoOiAxMjgwMDAsXG4gICAgICAgIG1heE91dHB1dFRva2VuczogODE5MixcbiAgICAgICAgcHJpY2luZzogeyBpbnB1dFBlck1pbGxpb246IDMuMCwgb3V0cHV0UGVyTWlsbGlvbjogMTUuMCB9LFxuICAgICAgICBjb21wYXQ6IHtcbiAgICAgICAgICB0eXBlOiBcIm9wZW5haS1jb21wbGV0aW9uc1wiLFxuICAgICAgICAgIG1heFRva2Vuc0ZpZWxkOiBcIm1heF90b2tlbnNcIixcbiAgICAgICAgICBzdXBwb3J0c0RldmVsb3BlclJvbGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9LFxuICBhcGlLZXk6ICgpID0+IHByb2Nlc3MuZW52Lk1ZX0FQSV9LRVksXG4gIGJhc2VVcmw6ICgpID0+IFwiaHR0cHM6Ly9hcGkubXktcHJvdmlkZXIuY29tL3YxXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGk6IEV4dGVuc2lvbkFQSSkge1xuICBwaS5yZWdpc3RlclByb3ZpZGVyKG15UHJvdmlkZXIpO1xufVxuYGBgXG5cbiMjIFByb3ZpZGVyIERlZmluaXRpb25cblxufCBGaWVsZCB8IFR5cGUgfCBEZXNjcmlwdGlvbiB8XG58LS0tfC0tLXwtLS18XG58IGBuYW1lYCB8IGBzdHJpbmdgIHwgVW5pcXVlIHByb3ZpZGVyIGlkZW50aWZpZXIuIFVzZWQgYXMgcHJlZml4IGluIG1vZGVsIElEcy4gfFxufCBgbW9kZWxzYCB8IGAoKSA9PiBQcm92aWRlck1vZGVsQ29uZmlnW11gIHwgUmV0dXJucyBhdmFpbGFibGUgbW9kZWxzLiBDYWxsZWQgd2hlbiBwaSBuZWVkcyB0aGUgbW9kZWwgbGlzdC4gUmV0dXJuIGBbXWAgaWYgdGhlIEFQSSBrZXkgaXMgbWlzc2luZy4gfFxufCBgYXBpS2V5YCB8IGAoKSA9PiBzdHJpbmcgXFx8IHVuZGVmaW5lZGAgfCBSZXR1cm5zIHRoZSBBUEkga2V5LiBQaSBjYWxscyB0aGlzIHdoZW4gbWFraW5nIHJlcXVlc3RzLiB8XG58IGBiYXNlVXJsYCB8IGAoKSA9PiBzdHJpbmcgXFx8IHVuZGVmaW5lZGAgfCBSZXR1cm5zIHRoZSBiYXNlIFVSTCBmb3IgdGhlIEFQSS4gfFxuXG5UaGUgYG1vZGVsc2AgZnVuY3Rpb24gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGNoZWNrIGZvciBBUEkga2V5IHByZXNlbmNlLiBJZiB0aGUga2V5IGlzIG1pc3NpbmcsIHJldHVybiBhbiBlbXB0eSBhcnJheSBhbmQgdGhlIHByb3ZpZGVyIHdpbGwgYXBwZWFyIHJlZ2lzdGVyZWQgYnV0IG9mZmVyIG5vIG1vZGVscy5cblxuIyMgTW9kZWwgRGVmaW5pdGlvblxuXG58IEZpZWxkIHwgVHlwZSB8IERlc2NyaXB0aW9uIHxcbnwtLS18LS0tfC0tLXxcbnwgYGlkYCB8IGBzdHJpbmdgIHwgVW5pcXVlIG1vZGVsIElELiBDb252ZW50aW9uOiBgcHJvdmlkZXIvbW9kZWwtbmFtZWAuIHxcbnwgYG5hbWVgIHwgYHN0cmluZ2AgfCBEaXNwbGF5IG5hbWUgc2hvd24gaW4gbW9kZWwgcGlja2VyLiB8XG58IGBwcm92aWRlcmAgfCBgc3RyaW5nYCB8IE11c3QgbWF0Y2ggdGhlIHByb3ZpZGVyJ3MgYG5hbWVgLiB8XG58IGBjYW5TdHJlYW1gIHwgYGJvb2xlYW5gIHwgV2hldGhlciB0aGUgbW9kZWwgc3VwcG9ydHMgc3RyZWFtaW5nIHJlc3BvbnNlcy4gfFxufCBgY29udGV4dExlbmd0aGAgfCBgbnVtYmVyYCB8IE1heGltdW0gY29udGV4dCB3aW5kb3cgaW4gdG9rZW5zLiB8XG58IGBtYXhPdXRwdXRUb2tlbnNgIHwgYG51bWJlcmAgfCBNYXhpbXVtIG91dHB1dCB0b2tlbnMgcGVyIHJlc3BvbnNlLiB8XG58IGBwcmljaW5nYCB8IGBvYmplY3RgIHwgYHsgaW5wdXRQZXJNaWxsaW9uLCBvdXRwdXRQZXJNaWxsaW9uIH1gIGluIFVTRC4gVXNlZCBmb3IgY29zdCBkaXNwbGF5LiB8XG58IGBjb21wYXRgIHwgYG9iamVjdGAgfCBPcGVuQUkgY29tcGF0aWJpbGl0eSBzZXR0aW5ncy4gU2VlIGJlbG93LiB8XG5cbiMjIENvbXBhdCBGaWVsZFxuXG5UaGUgYGNvbXBhdGAgZmllbGQgdGVsbHMgcGkgaG93IHRvIHRhbGsgdG8gdGhlIG1vZGVsJ3MgQVBJLiBNb3N0IHRoaXJkLXBhcnR5IEFQSXMgYXJlIE9wZW5BSS1jb21wYXRpYmxlIGJ1dCBkaWZmZXIgaW4gd2hpY2ggZmVhdHVyZXMgdGhleSBzdXBwb3J0LlxuXG5gYGB0eXBlc2NyaXB0XG5jb21wYXQ6IHtcbiAgdHlwZTogXCJvcGVuYWktY29tcGxldGlvbnNcIixcblxuICAvLyBXaGljaCBmaWVsZCBuYW1lIHRoZSBBUEkgdXNlcyBmb3IgbWF4IG91dHB1dCB0b2tlbnNcbiAgbWF4VG9rZW5zRmllbGQ6IFwibWF4X3Rva2Vuc1wiIHwgXCJtYXhfY29tcGxldGlvbl90b2tlbnNcIixcblxuICAvLyBXaGV0aGVyIHRoZSBBUEkgc3VwcG9ydHMgdGhlICdkZXZlbG9wZXInIHJvbGUgKHZzICdzeXN0ZW0nKVxuICBzdXBwb3J0c0RldmVsb3BlclJvbGU6IGJvb2xlYW4sXG5cbiAgLy8gV2hldGhlciB0aGUgQVBJIHN1cHBvcnRzIHRoZSAnc3RvcmUnIHBhcmFtZXRlclxuICBzdXBwb3J0c1N0b3JlOiBib29sZWFuLFxuXG4gIC8vIFdoZXRoZXIgdGhlIEFQSSBzdXBwb3J0cyByZWFzb25pbmdfZWZmb3J0IHBhcmFtZXRlclxuICBzdXBwb3J0c1JlYXNvbmluZ0VmZm9ydDogYm9vbGVhbixcblxuICAvLyBXaGV0aGVyIHVzYWdlIHN0YXRzIGFyZSBpbmNsdWRlZCBpbiBzdHJlYW1pbmcgcmVzcG9uc2VzXG4gIHN1cHBvcnRzVXNhZ2VJblN0cmVhbWluZzogYm9vbGVhbixcblxuICAvLyBXaGV0aGVyIHRvb2wgcmVzdWx0cyBtdXN0IGluY2x1ZGUgYSAnbmFtZScgZmllbGRcbiAgcmVxdWlyZXNUb29sUmVzdWx0TmFtZTogYm9vbGVhbixcblxuICAvLyBXaGV0aGVyIGFuIGFzc2lzdGFudCBtZXNzYWdlIGlzIHJlcXVpcmVkIGFmdGVyIHRvb2wgcmVzdWx0c1xuICByZXF1aXJlc0Fzc2lzdGFudEFmdGVyVG9vbFJlc3VsdDogYm9vbGVhbixcblxuICAvLyBXaGV0aGVyIHRoaW5raW5nL3JlYXNvbmluZyBtdXN0IGJlIHNlbnQgYXMgdGV4dCBjb250ZW50XG4gIHJlcXVpcmVzVGhpbmtpbmdBc1RleHQ6IGJvb2xlYW4sXG5cbiAgLy8gTWlzdHJhbC1zcGVjaWZpYyB0b29sIElEIHJlcXVpcmVtZW50c1xuICByZXF1aXJlc01pc3RyYWxUb29sSWRzOiBib29sZWFuLFxuXG4gIC8vIEZvcm1hdCBmb3IgdGhpbmtpbmcvcmVhc29uaW5nIGJsb2Nrc1xuICB0aGlua2luZ0Zvcm1hdDogXCJvcGVuYWlcIiB8IFwiemFpXCIgfCBcInF3ZW5cIixcblxuICAvLyBPcGVuUm91dGVyLXNwZWNpZmljIHJvdXRpbmcgaGludHNcbiAgb3BlblJvdXRlclJvdXRpbmc6IG9iamVjdCxcblxuICAvLyBWZXJjZWwgQUkgR2F0ZXdheSByb3V0aW5nXG4gIHZlcmNlbEdhdGV3YXlSb3V0aW5nOiBvYmplY3QsXG59XG5gYGBcblxuQWxsIGZpZWxkcyBpbiBgY29tcGF0YCBhcmUgb3B0aW9uYWwgZXhjZXB0IGB0eXBlYC4gU3RhcnQgd2l0aCB0aGUgbWluaW11bSBhbmQgYWRkIGZpZWxkcyBhcyBuZWVkZWQgYmFzZWQgb24gQVBJIGJlaGF2aW9yLlxuXG5UaGVyZSBpcyBhbHNvIGB0eXBlOiBcIm9wZW5haS1yZXNwb25zZXNcImAgZm9yIHByb3ZpZGVycyB1c2luZyB0aGUgT3BlbkFJIFJlc3BvbnNlcyBBUEksIHdoaWNoIGN1cnJlbnRseSBoYXMgbm8gYWRkaXRpb25hbCBjb21wYXQgZmllbGRzLlxuXG4jIyBQcm92aWRlciB3aXRoIEFQSSBLZXkgR2F0ZVxuXG5SZWdpc3RlciB0aGUgcHJvdmlkZXIgdW5jb25kaXRpb25hbGx5IGJ1dCBnYXRlIHRvb2xzL2NvbW1hbmRzIG9uIHRoZSBBUEkga2V5OlxuXG5gYGB0eXBlc2NyaXB0XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGk6IEV4dGVuc2lvbkFQSSkge1xuICAvLyBQcm92aWRlciBhbHdheXMgcmVnaXN0ZXJlZCAtLSBtb2RlbHMoKSByZXR1cm5zIFtdIGlmIG5vIGtleVxuICBwaS5yZWdpc3RlclByb3ZpZGVyKG15UHJvdmlkZXIpO1xuXG4gIGNvbnN0IGFwaUtleSA9IHByb2Nlc3MuZW52Lk1ZX0FQSV9LRVk7XG4gIGlmICghYXBpS2V5KSByZXR1cm47XG5cbiAgLy8gT25seSByZWdpc3RlciB0b29scyB0aGF0IG5lZWQgdGhlIGtleVxuICBwaS5yZWdpc3RlclRvb2woY3JlYXRlU2VhcmNoVG9vbChhcGlLZXkpKTtcbiAgcGkucmVnaXN0ZXJDb21tYW5kKGNyZWF0ZVF1b3Rhc0NvbW1hbmQoYXBpS2V5KSk7XG59XG5gYGBcblxuVGhpcyB3YXkgdGhlIHByb3ZpZGVyIGFwcGVhcnMgaW4gcGkncyBwcm92aWRlciBsaXN0IGV2ZW4gd2l0aG91dCBhIGtleSwgYW5kIHVzZXJzIHNlZSBhIGNsZWFyIFwibm8gbW9kZWxzIGF2YWlsYWJsZVwiIHN0YXRlIHJhdGhlciB0aGFuIGEgbWlzc2luZyBwcm92aWRlci5cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzMxMTY3MX19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHNjb3V0KSJ9LCJpZCI6IjljMWRjM2ZhIiwicGFyZW50SWQiOiI2ZjU0NGM3NiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTU6MTcuNzU5WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjE5M2JlNmFhIiwicGFyZW50SWQiOiI5YzFkYzNmYSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTU6MTcuNzYwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiTm93IEkgaGF2ZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBldmVyeXRoaW5nLiBMZXQgbWUgYWxzbyBjaGVjayB0aGUgc2ltcGxlIGByZWdpc3RlclByb3ZpZGVyYCBvdmVybG9hZCB0aGF0IHRha2VzIGp1c3QgYSBuYW1lICsgb3B0aW9ucyAobGlrZSB0aGUgUE9DIGRvZXMpLCBzaW5jZSB0aGF0J3MgZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgUHJvdmlkZXJEZWZpbml0aW9uLiIsInRoaW5raW5nU2lnbmF0dXJlIjoiRXY4Q0NrWUlDeGdDS2tDek84SmdjcGw5QUdJenlUeVA2bVIzaFFhKzRhVFZYeWpTd3N0clZYbG5SNFBFamZBUWQ4bHlOMjJMMmFPWTJOTjd0Wll0K1hDb1NQNi9oeklPY3I4OUVneWZFSkJ1cnk3ODdLL0xqbElhREFnWmE1Vk1ldDQweTNxaXlTSXc4TndNSXk3dThaTTlDWm1wdCtOQTZBMmJSTDVwMVJLbkw3TVVxYzIzVDJBSEx2aVl0SDU2RFlKWlpjc2pseUpuS3VZQktjSmplMFdOb0lrYmJLSFBRblg5SGRBUlJMZUFZNENmWlJyVHYxMGkzTXJZWG91MXFzd1hnWW9rQzExYWpOdk5zUStnR0JSNlg3RWxrQzB6Y2FsNDhKeWRKVjBwSDZJb2Vrb0F0SXpxbjdENWROK3FmbWFZaWo3RzNaTEV2VUpvNmYzTjNWWDVtcWhpczNLN1B4SXVqa08yWkx6elppVTZoQTlqejdxczdzWUZWS0lSczBlemRQdFJvQnZmRE9jMGVHbmhoa01YZ1FSeW5mTVNyZFB5UzlxczcxWnd4VWZ1MEdPdTZaTkE3SmtJUG9OMkdWbVBRcTZJWEdJKzZBZUpmY09KaXpPUDhJNmtIQjk3ZXhjSnU0RFcwZzU0cVRFSHNkS1JkMnRBekdYeEhJUld0ZndZQVE9PSJ9LHsidHlwZSI6InRleHQiLCJ0ZXh0IjoiTm93IGxldCBtZSBjaGVjayB0aGUgc2ltcGxlciBgcmVnaXN0ZXJQcm92aWRlcmAgb3ZlcmxvYWQgdXNlZCBpbiB0aGUgUE9DOiJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMVRCbXhYeURWcDNOTnRWMmNWak5HR3EiLCJuYW1lIjoic2NvdXQiLCJhcmd1bWVudHMiOnsicHJvbXB0IjoiRmluZCB0aGUgcmVnaXN0ZXJQcm92aWRlciBtZXRob2Qgc2lnbmF0dXJlIG9uIEV4dGVuc2lvbkFQSS4gSSBuZWVkIHRvIHNlZSBhbGwgb3ZlcmxvYWRzLCBlc3BlY2lhbGx5IHRoZSBzaW1wbGUgb25lIHRoYXQgdGFrZXMgKG5hbWUsIHsgYmFzZVVybCwgYXBpS2V5IH0pLiIsInJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicXVlcnkiOiJyZWdpc3RlclByb3ZpZGVyIEV4dGVuc2lvbkFQSSBvdmVybG9hZCBiYXNlVXJsIGFwaUtleSJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0IjoyMjEsImNhY2hlUmVhZCI6MzkzNjQsImNhY2hlV3JpdGUiOjE2MDUsInRvdGFsVG9rZW5zIjo0MTE5MSwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDU1MjUsImNhY2hlUmVhZCI6MC4wMTk2ODE5OTk5OTk5OTk5OTgsImNhY2hlV3JpdGUiOjAuMDEwMDMxMjUsInRvdGFsIjowLjAzNTI0MzI1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3MzExNjc2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNWQ5ZGY4ZDUiLCJwYXJlbnRJZCI6IjE5M2JlNmFhIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NTozOS43MjlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVRCbXhYeURWcDNOTnRWMmNWak5HR3EiLCJ0b29sTmFtZSI6InNjb3V0IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiQmFzZWQgb24gbXkgc2VhcmNoIG9mIHRoZSBiYWRsb2dpYy9waS1tb25vIHJlcG9zaXRvcnksIGhlcmUncyB0aGUgY29tcGxldGUgYHJlZ2lzdGVyUHJvdmlkZXJgIG1ldGhvZCBzaWduYXR1cmUgb24gYEV4dGVuc2lvbkFQSWAgd2l0aCBhbGwgaXRzIGRldGFpbHM6XG5cbiMjIGByZWdpc3RlclByb3ZpZGVyYCBNZXRob2QgU2lnbmF0dXJlXG5cbioqTG9jYXRpb246KiogW3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3R5cGVzLnRzXShodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHMpXG5cbiMjIyBNZXRob2QgRGVmaW5pdGlvblxuYGBgdHlwZXNjcmlwdFxucmVnaXN0ZXJQcm92aWRlcihuYW1lOiBzdHJpbmcsIGNvbmZpZzogUHJvdmlkZXJDb25maWcpOiB2b2lkO1xuYGBgXG5cbiMjIyBDb25maWcgU3RydWN0dXJlXG5cblRoZSBgUHJvdmlkZXJDb25maWdgIGludGVyZmFjZSBzdXBwb3J0cyBhbGwgdGhlIHNjZW5hcmlvcyB5b3UgbWVudGlvbmVkOlxuXG5gYGB0eXBlc2NyaXB0XG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyQ29uZmlnIHtcblx0LyoqIEJhc2UgVVJMIGZvciB0aGUgQVBJIGVuZHBvaW50LiBSZXF1aXJlZCB3aGVuIGRlZmluaW5nIG1vZGVscy4gKi9cblx0YmFzZVVybD86IHN0cmluZztcblx0LyoqIEFQSSBrZXkgb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS4gUmVxdWlyZWQgd2hlbiBkZWZpbmluZyBtb2RlbHMgKHVubGVzcyBvYXV0aCBwcm92aWRlZCkuICovXG5cdGFwaUtleT86IHN0cmluZztcblx0LyoqIEFQSSB0eXBlLiBSZXF1aXJlZCBhdCBwcm92aWRlciBvciBtb2RlbCBsZXZlbCB3aGVuIGRlZmluaW5nIG1vZGVscy4gKi9cblx0YXBpPzogQXBpO1xuXHQvKiogT3B0aW9uYWwgc3RyZWFtU2ltcGxlIGhhbmRsZXIgZm9yIGN1c3RvbSBBUElzLiAqL1xuXHRzdHJlYW1TaW1wbGU/OiAobW9kZWw6IE1vZGVsPEFwaT4sIGNvbnRleHQ6IENvbnRleHQsIG9wdGlvbnM/OiBTaW1wbGVTdHJlYW1PcHRpb25zKSA9PiBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW07XG5cdC8qKiBDdXN0b20gaGVhZGVycyB0byBpbmNsdWRlIGluIHJlcXVlc3RzLiAqL1xuXHRoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqIElmIHRydWUsIGFkZHMgQXV0aG9yaXphdGlvbjogQmVhcmVyIGhlYWRlciB3aXRoIHRoZSByZXNvbHZlZCBBUEkga2V5LiAqL1xuXHRhdXRoSGVhZGVyPzogYm9vbGVhbjtcblx0LyoqIE1vZGVscyB0byByZWdpc3Rlci4gSWYgcHJvdmlkZWQsIHJlcGxhY2VzIGFsbCBleGlzdGluZyBtb2RlbHMgZm9yIHRoaXMgcHJvdmlkZXIuICovXG5cdG1vZGVscz86IFByb3ZpZGVyTW9kZWxDb25maWdbXTtcblx0LyoqIE9BdXRoIHByb3ZpZGVyIGZvciAvbG9naW4gc3VwcG9ydC4gVGhlIGBpZGAgaXMgc2V0IGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcHJvdmlkZXIgbmFtZS4gKi9cblx0b2F1dGg/OiB7IC8qIC4uLiAqLyB9O1xufVxuYGBgXG5cbiMjIyBVc2FnZSBFeGFtcGxlc1xuXG5UaGUgKipzaW1wbGUgb3ZlcmxvYWQgeW91IGFza2VkIGZvcioqICh3aXRoIGp1c3QgYGJhc2VVcmxgIGFuZCBgYXBpS2V5YCk6XG5cbmBgYHR5cGVzY3JpcHRcbi8vIE92ZXJyaWRlIGJhc2VVcmwgZm9yIGFuIGV4aXN0aW5nIHByb3ZpZGVyXG5waS5yZWdpc3RlclByb3ZpZGVyKFwiYW50aHJvcGljXCIsIHtcbiAgYmFzZVVybDogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tXCJcbn0pO1xuYGBgXG5cbioqRnVsbCBwcm92aWRlciByZWdpc3RyYXRpb24qKiB3aXRoIG1vZGVsczpcbmBgYHR5cGVzY3JpcHRcbnBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJteS1wcm94eVwiLCB7XG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbVwiLFxuICBhcGlLZXk6IFwiUFJPWFlfQVBJX0tFWVwiLFxuICBhcGk6IFwiYW50aHJvcGljLW1lc3NhZ2VzXCIsXG4gIG1vZGVsczogW1xuICAgIHtcbiAgICAgIGlkOiBcImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNFwiLFxuICAgICAgbmFtZTogXCJDbGF1ZGUgNCBTb25uZXQgKHByb3h5KVwiLFxuICAgICAgcmVhc29uaW5nOiBmYWxzZSxcbiAgICAgIGlucHV0OiBbXCJ0ZXh0XCIsIFwiaW1hZ2VcIl0sXG4gICAgICBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LFxuICAgICAgY29udGV4dFdpbmRvdzogMjAwMDAwLFxuICAgICAgbWF4VG9rZW5zOiAxNjM4NFxuICAgIH1cbiAgXVxufSk7XG5gYGBcblxuKipXaXRoIE9BdXRoIHN1cHBvcnQqKjpcbmBgYHR5cGVzY3JpcHRcbnBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJjb3Jwb3JhdGUtYWlcIiwge1xuICBiYXNlVXJsOiBcImh0dHBzOi8vYWkuY29ycC5jb21cIixcbiAgYXBpOiBcIm9wZW5haS1yZXNwb25zZXNcIixcbiAgbW9kZWxzOiBbLi4uXSxcbiAgb2F1dGg6IHtcbiAgICBuYW1lOiBcIkNvcnBvcmF0ZSBBSSAoU1NPKVwiLFxuICAgIGFzeW5jIGxvZ2luKGNhbGxiYWNrcykgeyAvKiAuLi4gKi8gfSxcbiAgICBhc3luYyByZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpIHsgLyogLi4uICovIH0sXG4gICAgZ2V0QXBpS2V5KGNyZWRlbnRpYWxzKSB7IHJldHVybiBjcmVkZW50aWFscy5hY2Nlc3M7IH1cbiAgfVxufSk7XG5gYGBcblxuVGhlIG1ldGhvZCBpcyBub3QgdHJ1bHkgXCJvdmVybG9hZGVkXCIgaW4gdGhlIFR5cGVTY3JpcHQgc2Vuc2UsIGJ1dCByYXRoZXIgdXNlcyBhIGZsZXhpYmxlIGBQcm92aWRlckNvbmZpZ2AgaW50ZXJmYWNlIHdoZXJlOlxuLSBJZiBgbW9kZWxzYCBpcyBwcm92aWRlZDogcmVwbGFjZXMgYWxsIGV4aXN0aW5nIG1vZGVscyBmb3IgdGhlIHByb3ZpZGVyXG4tIElmIG9ubHkgYGJhc2VVcmxgIGlzIHByb3ZpZGVkOiBvdmVycmlkZXMgdGhlIFVSTCBmb3IgZXhpc3RpbmcgbW9kZWxzIChzaW1wbGUgY2FzZSlcbi0gQWRkaXRpb25hbCBvcHRpb25zIGxpa2UgYG9hdXRoYCBhbmQgYHN0cmVhbVNpbXBsZWAgZW5hYmxlIGFkdmFuY2VkIHNjZW5hcmlvcyJ9XSwiZGV0YWlscyI6eyJfcmVuZGVyS2V5IjoidG9vbHVfMDFUQm14WHlEVnAzTk50VjJjVmpOR0dxIiwicXVlcnkiOiJyZWdpc3RlclByb3ZpZGVyIEV4dGVuc2lvbkFQSSBvdmVybG9hZCBiYXNlVXJsIGFwaUtleSIsInJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicHJvbXB0IjoiRmluZCB0aGUgcmVnaXN0ZXJQcm92aWRlciBtZXRob2Qgc2lnbmF0dXJlIG9uIEV4dGVuc2lvbkFQSS4gSSBuZWVkIHRvIHNlZSBhbGwgb3ZlcmxvYWRzLCBlc3BlY2lhbGx5IHRoZSBzaW1wbGUgb25lIHRoYXQgdGFrZXMgKG5hbWUsIHsgYmFzZVVybCwgYXBpS2V5IH0pLiIsInNraWxsc1Jlc29sdmVkIjowLCJ0b29sQ2FsbHMiOlt7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxR3ZOOU5CWHhWbVB5N1Q0aWFLb0RGbSIsInRvb2xOYW1lIjoiZ2l0aHViX3NlYXJjaCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJxdWVyeSI6InJlZ2lzdGVyUHJvdmlkZXIgRXh0ZW5zaW9uQVBJIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDczMjE3MDUsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIENvZGUgU2VhcmNoIFJlc3VsdHNcblxuKipRdWVyeToqKiBgcmVnaXN0ZXJQcm92aWRlciBFeHRlbnNpb25BUElgXG4qKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuKipUb3RhbCBSZXN1bHRzOioqIDhcblxuIyMgUmVzdWx0c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL2xvYWRlci50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvZXh0ZW5zaW9ucy9sb2FkZXIudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2N1c3RvbS1wcm92aWRlci5tZFxuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9jdXN0b20tcHJvdmlkZXIubWRcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9DSEFOR0VMT0cubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L0NIQU5HRUxPRy5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWFudGhyb3BpYy9pbmRleC50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXMvZXh0ZW5zaW9ucy9jdXN0b20tcHJvdmlkZXItYW50aHJvcGljL2luZGV4LnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9leHRlbnNpb25zLm1kXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2V4dGVuc2lvbnMubWRcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1xd2VuLWNsaS9pbmRleC50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXMvZXh0ZW5zaW9ucy9jdXN0b20tcHJvdmlkZXItcXdlbi1jbGkvaW5kZXgudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1naXRsYWItZHVvL2luZGV4LnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcy9leHRlbnNpb25zL2N1c3RvbS1wcm92aWRlci1naXRsYWItZHVvL2luZGV4LnRzXG5cbiJ9XSwiZGV0YWlscyI6eyJxdWVyeSI6InJlZ2lzdGVyUHJvdmlkZXIgRXh0ZW5zaW9uQVBJIiwicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzMyMTcwNCwiZW5kZWRBdCI6MTc3MTM0NzMyMjIxNywiZHVyYXRpb25NcyI6NTEzfX19fSwiZW5kZWRBdCI6MTc3MTM0NzMyMjIxOCwiZHVyYXRpb25NcyI6NTEzfSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxU0hGc0Q4blNRNTIzOGRxVVFBTjVuTSIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDczMjIyMTgsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIGJhZGxvZ2ljL3BpLW1vbm9cblxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kc1xuXG4jIyBSZXBvc2l0b3J5IEluZm9cblxuLSAqKlN0YXJzOioqIDEzMDkxXG4tICoqRm9ya3M6KiogMTMxNFxuLSAqKkxhbmd1YWdlOioqIFR5cGVTY3JpcHRcbi0gKipMaWNlbnNlOioqIE1JVCBMaWNlbnNlXG4tICoqRGVmYXVsdCBCcmFuY2g6KiogbWFpblxuLSAqKk9wZW4gSXNzdWVzOioqIDdcblxuIyMgUkVBRE1FXG5cbiMg8J+Plu+4jyBPU1MgVmFjYXRpb25cblxuKipJc3N1ZSB0cmFja2VyIGFuZCBQUnMgcmVvcGVuIEZlYnJ1YXJ5IDIzLCAyMDI2LioqXG5cbkFsbCBQUnMgd2lsbCBiZSBhdXRvLWNsb3NlZCB1bnRpbCB0aGVuLiBBcHByb3ZlZCBjb250cmlidXRvcnMgY2FuIHN1Ym1pdCBQUnMgYWZ0ZXIgdmFjYXRpb24gd2l0aG91dCByZWFwcHJvdmFsLiBGb3Igc3VwcG9ydCwgam9pbiBbRGlzY29yZF0oaHR0cHM6Ly9kaXNjb3JkLmNvbS9pbnZpdGUvM2NVN0J6NFVQeCkuXG5cbi0tLVxuXG48cCBhbGlnbj1cImNlbnRlclwiPlxuICA8YSBocmVmPVwiaHR0cHM6Ly9zaGl0dHljb2RpbmdhZ2VudC5haVwiPlxuICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9zaGl0dHljb2RpbmdhZ2VudC5haS9sb2dvLnN2Z1wiIGFsdD1cInBpIGxvZ29cIiB3aWR0aD1cIjEyOFwiPlxuICA8L2E+XG48L3A+XG48cCBhbGlnbj1cImNlbnRlclwiPlxuICA8YSBocmVmPVwiaHR0cHM6Ly9kaXNjb3JkLmNvbS9pbnZpdGUvM2NVN0J6NFVQeFwiPjxpbWcgYWx0PVwiRGlzY29yZFwiIHNyYz1cImh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvZGlzY29yZC1jb21tdW5pdHktNTg2NUYyP3N0eWxlPWZsYXQtc3F1YXJlJmxvZ289ZGlzY29yZCZsb2dvQ29sb3I9d2hpdGVcIiAvPjwvYT5cbiAgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbFwiPjxpbWcgYWx0PVwiQnVpbGQgc3RhdHVzXCIgc3JjPVwiaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvYWN0aW9ucy93b3JrZmxvdy9zdGF0dXMvYmFkbG9naWMvcGktbW9uby9jaS55bWw/c3R5bGU9ZmxhdC1zcXVhcmUmYnJhbmNoPW1haW5cIiAvPjwvYT5cbjwvcD5cbjxwIGFsaWduPVwiY2VudGVyXCI+XG4gIDxhIGhyZWY9XCJodHRwczovL3BpLmRldlwiPnBpLmRldjwvYT4gZG9tYWluIGdyYWNpb3VzbHkgZG9uYXRlZCBieVxuICA8YnIgLz48YnIgLz5cbiAgPGEgaHJlZj1cImh0dHBzOi8vZXhlLmRldlwiPjxpbWcgc3JjPVwicGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvaW1hZ2VzL2V4eS5wbmdcIiBhbHQ9XCJFeHkgbWFzY290XCIgd2lkdGg9XCI0OFwiIC8+PGJyIC8+ZXhlLmRldjwvYT5cbjwvcD5cblxuIyBQaSBNb25vcmVwb1xuXG4+ICoqTG9va2luZyBmb3IgdGhlIHBpIGNvZGluZyBhZ2VudD8qKiBTZWUgKipbcGFja2FnZXMvY29kaW5nLWFnZW50XShwYWNrYWdlcy9jb2RpbmctYWdlbnQpKiogZm9yIGluc3RhbGxhdGlvbiBhbmQgdXNhZ2UuXG5cblRvb2xzIGZvciBidWlsZGluZyBBSSBhZ2VudHMgYW5kIG1hbmFnaW5nIExMTSBkZXBsb3ltZW50cy5cblxuIyMgUGFja2FnZXNcblxufCBQYWNrYWdlIHwgRGVzY3JpcHRpb24gfFxufC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLWFpXShwYWNrYWdlcy9haSkqKiB8IFVuaWZpZWQgbXVsdGktcHJvdmlkZXIgTExNIEFQSSAoT3BlbkFJLCBBbnRocm9waWMsIEdvb2dsZSwgZXRjLikgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLWFnZW50LWNvcmVdKHBhY2thZ2VzL2FnZW50KSoqIHwgQWdlbnQgcnVudGltZSB3aXRoIHRvb2wgY2FsbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCB8XG58ICoqW0BtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XShwYWNrYWdlcy9jb2RpbmctYWdlbnQpKiogfCBJbnRlcmFjdGl2ZSBjb2RpbmcgYWdlbnQgQ0xJIHxcbnwgKipbQG1hcmlvemVjaG5lci9waS1tb21dKHBhY2thZ2VzL21vbSkqKiB8IFNsYWNrIGJvdCB0aGF0IGRlbGVnYXRlcyBtZXNzYWdlcyB0byB0aGUgcGkgY29kaW5nIGFnZW50IHxcbnwgKipbQG1hcmlvemVjaG5lci9waS10dWldKHBhY2thZ2VzL3R1aSkqKiB8IFRlcm1pbmFsIFVJIGxpYnJhcnkgd2l0aCBkaWZmZXJlbnRpYWwgcmVuZGVyaW5nIHxcbnwgKipbQG1hcmlvemVjaG5lci9waS13ZWItdWldKHBhY2thZ2VzL3dlYi11aSkqKiB8IFdlYiBjb21wb25lbnRzIGZvciBBSSBjaGF0IGludGVyZmFjZXMgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLXBvZHNdKHBhY2thZ2VzL3BvZHMpKiogfCBDTEkgZm9yIG1hbmFnaW5nIHZMTE0gZGVwbG95bWVudHMgb24gR1BVIHBvZHMgfFxuXG4jIyBDb250cmlidXRpbmdcblxuU2VlIFtDT05UUklCVVRJTkcubWRdKENPTlRSSUJVVElORy5tZCkgZm9yIGNvbnRyaWJ1dGlvbiBndWlkZWxpbmVzIGFuZCBbQUdFTlRTLm1kXShBR0VOVFMubWQpIGZvciBwcm9qZWN0LXNwZWNpZmljIHJ1bGVzIChmb3IgYm90aCBodW1hbnMgYW5kIGFnZW50cykuXG5cbiMjIERldmVsb3BtZW50XG5cbmBgYGJhc2hcbm5wbSBpbnN0YWxsICAgICAgICAgICMgSW5zdGFsbCBhbGwgZGVwZW5kZW5jaWVzXG5ucG0gcnVuIGJ1aWxkICAgICAgICAjIEJ1aWxkIGFsbCBwYWNrYWdlc1xubnBtIHJ1biBjaGVjayAgICAgICAgIyBMaW50LCBmb3JtYXQsIGFuZCB0eXBlIGNoZWNrXG4uL3Rlc3Quc2ggICAgICAgICAgICAjIFJ1biB0ZXN0cyAoc2tpcHMgTExNLWRlcGVuZGVudCB0ZXN0cyB3aXRob3V0IEFQSSBrZXlzKVxuLi9waS10ZXN0LnNoICAgICAgICAgIyBSdW4gcGkgZnJvbSBzb3VyY2VzIChtdXN0IGJlIHJ1biBmcm9tIHJlcG8gcm9vdClcbmBgYFxuXG4+ICoqTm90ZToqKiBgbnBtIHJ1biBjaGVja2AgcmVxdWlyZXMgYG5wbSBydW4gYnVpbGRgIHRvIGJlIHJ1biBmaXJzdC4gVGhlIHdlYi11aSBwYWNrYWdlIHVzZXMgYHRzY2Agd2hpY2ggbmVlZHMgY29tcGlsZWQgYC5kLnRzYCBmaWxlcyBmcm9tIGRlcGVuZGVuY2llcy5cblxuIyMgTGljZW5zZVxuXG5NSVRcbiMjIFJlcG9zaXRvcnkgU3RydWN0dXJlXG5cbi0gW2RdIC5naXRodWJcbi0gW2ZdIC5naXRpZ25vcmVcbi0gW2RdIC5odXNreVxuLSBbZF0gLnBpXG4tIFtmXSBBR0VOVFMubWRcbi0gW2ZdIENPTlRSSUJVVElORy5tZFxuLSBbZl0gTElDRU5TRVxuLSBbZl0gUkVBRE1FLm1kXG4tIFtmXSBiaW9tZS5qc29uXG4tIFtmXSBwYWNrYWdlLWxvY2suanNvblxuLSBbZl0gcGFja2FnZS5qc29uXG4tIFtkXSBwYWNrYWdlc1xuLSBbZl0gcGktbW9uby5jb2RlLXdvcmtzcGFjZVxuLSBbZl0gcGktdGVzdC5zaFxuLSBbZF0gc2NyaXB0c1xuLSBbZl0gdGVzdC5zaFxuLSBbZl0gdHNjb25maWcuYmFzZS5qc29uXG4tIFtmXSB0c2NvbmZpZy5qc29uXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6bnVsbCwicmVmIjpudWxsLCJjb250ZW50VHlwZSI6InJlcG8iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzMyMjIxNywiZW5kZWRBdCI6MTc3MTM0NzMyMjkyMSwiZHVyYXRpb25NcyI6NzA0fX19fSwiZW5kZWRBdCI6MTc3MTM0NzMyMjkyMSwiZHVyYXRpb25NcyI6NzAzfSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxUDhockVlQWtjeFVqYkJ2RkJ6NEIyOCIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3R5cGVzLnRzIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDczMjU5MTIsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIHR5cGVzLnRzXG5cbioqUGF0aDoqKiBgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHNgXG4qKlNpemU6KiogNDQzNjIgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuLyoqXG4gKiBFeHRlbnNpb24gc3lzdGVtIHR5cGVzLlxuICpcbiAqIEV4dGVuc2lvbnMgYXJlIFR5cGVTY3JpcHQgbW9kdWxlcyB0aGF0IGNhbjpcbiAqIC0gU3Vic2NyaWJlIHRvIGFnZW50IGxpZmVjeWNsZSBldmVudHNcbiAqIC0gUmVnaXN0ZXIgTExNLWNhbGxhYmxlIHRvb2xzXG4gKiAtIFJlZ2lzdGVyIGNvbW1hbmRzLCBrZXlib2FyZCBzaG9ydGN1dHMsIGFuZCBDTEkgZmxhZ3NcbiAqIC0gSW50ZXJhY3Qgd2l0aCB0aGUgdXNlciB2aWEgVUkgcHJpbWl0aXZlc1xuICovXG5cbmltcG9ydCB0eXBlIHtcblx0QWdlbnRNZXNzYWdlLFxuXHRBZ2VudFRvb2xSZXN1bHQsXG5cdEFnZW50VG9vbFVwZGF0ZUNhbGxiYWNrLFxuXHRUaGlua2luZ0xldmVsLFxufSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1hZ2VudC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFwaSxcblx0QXNzaXN0YW50TWVzc2FnZUV2ZW50LFxuXHRBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW0sXG5cdENvbnRleHQsXG5cdEltYWdlQ29udGVudCxcblx0TW9kZWwsXG5cdE9BdXRoQ3JlZGVudGlhbHMsXG5cdE9BdXRoTG9naW5DYWxsYmFja3MsXG5cdFNpbXBsZVN0cmVhbU9wdGlvbnMsXG5cdFRleHRDb250ZW50LFxuXHRUb29sUmVzdWx0TWVzc2FnZSxcbn0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktYWlcIjtcbmltcG9ydCB0eXBlIHtcblx0QXV0b2NvbXBsZXRlSXRlbSxcblx0Q29tcG9uZW50LFxuXHRFZGl0b3JDb21wb25lbnQsXG5cdEVkaXRvclRoZW1lLFxuXHRLZXlJZCxcblx0T3ZlcmxheUhhbmRsZSxcblx0T3ZlcmxheU9wdGlvbnMsXG5cdFRVSSxcbn0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXRpYywgVFNjaGVtYSB9IGZyb20gXCJAc2luY2xhaXIvdHlwZWJveFwiO1xuaW1wb3J0IHR5cGUgeyBUaGVtZSB9IGZyb20gXCIuLi8uLi9tb2Rlcy9pbnRlcmFjdGl2ZS90aGVtZS90aGVtZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCYXNoUmVzdWx0IH0gZnJvbSBcIi4uL2Jhc2gtZXhlY3V0b3IuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGFjdGlvblByZXBhcmF0aW9uLCBDb21wYWN0aW9uUmVzdWx0IH0gZnJvbSBcIi4uL2NvbXBhY3Rpb24vaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRCdXMgfSBmcm9tIFwiLi4vZXZlbnQtYnVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNPcHRpb25zLCBFeGVjUmVzdWx0IH0gZnJvbSBcIi4uL2V4ZWMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlGb290ZXJEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vZm9vdGVyLWRhdGEtcHJvdmlkZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5YmluZGluZ3NNYW5hZ2VyIH0gZnJvbSBcIi4uL2tleWJpbmRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU1lc3NhZ2UgfSBmcm9tIFwiLi4vbWVzc2FnZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgTW9kZWxSZWdpc3RyeSB9IGZyb20gXCIuLi9tb2RlbC1yZWdpc3RyeS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRCcmFuY2hTdW1tYXJ5RW50cnksXG5cdENvbXBhY3Rpb25FbnRyeSxcblx0UmVhZG9ubHlTZXNzaW9uTWFuYWdlcixcblx0U2Vzc2lvbkVudHJ5LFxuXHRTZXNzaW9uTWFuYWdlcixcbn0gZnJvbSBcIi4uL3Nlc3Npb24tbWFuYWdlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbGFzaENvbW1hbmRJbmZvIH0gZnJvbSBcIi4uL3NsYXNoLWNvbW1hbmRzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2hPcGVyYXRpb25zIH0gZnJvbSBcIi4uL3Rvb2xzL2Jhc2guanNcIjtcbmltcG9ydCB0eXBlIHsgRWRpdFRvb2xEZXRhaWxzIH0gZnJvbSBcIi4uL3Rvb2xzL2VkaXQuanNcIjtcbmltcG9ydCB0eXBlIHtcblx0QmFzaFRvb2xEZXRhaWxzLFxuXHRCYXNoVG9vbElucHV0LFxuXHRFZGl0VG9vbElucHV0LFxuXHRGaW5kVG9vbERldGFpbHMsXG5cdEZpbmRUb29sSW5wdXQsXG5cdEdyZXBUb29sRGV0YWlscyxcblx0R3JlcFRvb2xJbnB1dCxcblx0THNUb29sRGV0YWlscyxcblx0THNUb29sSW5wdXQsXG5cdFJlYWRUb29sRGV0YWlscyxcblx0UmVhZFRvb2xJbnB1dCxcblx0V3JpdGVUb29sSW5wdXQsXG59IGZyb20gXCIuLi90b29scy9pbmRleC5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEV4ZWNPcHRpb25zLCBFeGVjUmVzdWx0IH0gZnJvbSBcIi4uL2V4ZWMuanNcIjtcbmV4cG9ydCB0eXBlIHsgQWdlbnRUb29sUmVzdWx0LCBBZ2VudFRvb2xVcGRhdGVDYWxsYmFjayB9O1xuZXhwb3J0IHR5cGUgeyBBcHBBY3Rpb24sIEtleWJpbmRpbmdzTWFuYWdlciB9IGZyb20gXCIuLi9rZXliaW5kaW5ncy5qc1wiO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVSSBDb250ZXh0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBPcHRpb25zIGZvciBleHRlbnNpb24gVUkgZGlhbG9ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uVUlEaWFsb2dPcHRpb25zIHtcblx0LyoqIEFib3J0U2lnbmFsIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzbWlzcyB0aGUgZGlhbG9nLiAqL1xuXHRzaWduYWw/OiBBYm9ydFNpZ25hbDtcblx0LyoqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBEaWFsb2cgYXV0by1kaXNtaXNzZXMgd2l0aCBsaXZlIGNvdW50ZG93biBkaXNwbGF5LiAqL1xuXHR0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKiogUGxhY2VtZW50IGZvciBleHRlbnNpb24gd2lkZ2V0cy4gKi9cbmV4cG9ydCB0eXBlIFdpZGdldFBsYWNlbWVudCA9IFwiYWJvdmVFZGl0b3JcIiB8IFwiYmVsb3dFZGl0b3JcIjtcblxuLyoqIE9wdGlvbnMgZm9yIGV4dGVuc2lvbiB3aWRnZXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25XaWRnZXRPcHRpb25zIHtcblx0LyoqIFdoZXJlIHRoZSB3aWRnZXQgaXMgcmVuZGVyZWQuIERlZmF1bHRzIHRvIFwiYWJvdmVFZGl0b3JcIi4gKi9cblx0cGxhY2VtZW50PzogV2lkZ2V0UGxhY2VtZW50O1xufVxuXG4vKiogUmF3IHRlcm1pbmFsIGlucHV0IGxpc3RlbmVyIGZvciBleHRlbnNpb25zLiAqL1xuZXhwb3J0IHR5cGUgVGVybWluYWxJbnB1dEhhbmRsZXIgPSAoZGF0YTogc3RyaW5nKSA9PiB7IGNvbnN1bWU/OiBib29sZWFuOyBkYXRhPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogVUkgY29udGV4dCBmb3IgZXh0ZW5zaW9ucyB0byByZXF1ZXN0IGludGVyYWN0aXZlIFVJLlxuICogRWFjaCBtb2RlIChpbnRlcmFjdGl2ZSwgUlBDLCBwcmludCkgcHJvdmlkZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25VSUNvbnRleHQge1xuXHQvKiogU2hvdyBhIHNlbGVjdG9yIGFuZCByZXR1cm4gdGhlIHVzZXIncyBjaG9pY2UuICovXG5cdHNlbGVjdCh0aXRsZTogc3RyaW5nLCBvcHRpb25zOiBzdHJpbmdbXSwgb3B0cz86IEV4dGVuc2lvblVJRGlhbG9nT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuXHQvKiogU2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cuICovXG5cdGNvbmZpcm0odGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBvcHRzPzogRXh0ZW5zaW9uVUlEaWFsb2dPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHQvKiogU2hvdyBhIHRleHQgaW5wdXQgZGlhbG9nLiAqL1xuXHRpbnB1dCh0aXRsZTogc3RyaW5nLCBwbGFjZWhvbGRlcj86IHN0cmluZywgb3B0cz86IEV4dGVuc2lvblVJRGlhbG9nT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuXHQvKiogU2hvdyBhIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci4gKi9cblx0bm90aWZ5KG1lc3NhZ2U6IHN0cmluZywgdHlwZT86IFwiaW5mb1wiIHwgXCJ3YXJuaW5nXCIgfCBcImVycm9yXCIpOiB2b2lkO1xuXG5cdC8qKiBMaXN0ZW4gdG8gcmF3IHRlcm1pbmFsIGlucHV0IChpbnRlcmFjdGl2ZSBtb2RlIG9ubHkpLiBSZXR1cm5zIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLiAqL1xuXHRvblRlcm1pbmFsSW5wdXQoaGFuZGxlcjogVGVybWluYWxJbnB1dEhhbmRsZXIpOiAoKSA9PiB2b2lkO1xuXG5cdC8qKiBTZXQgc3RhdHVzIHRleHQgaW4gdGhlIGZvb3Rlci9zdGF0dXMgYmFyLiBQYXNzIHVuZGVmaW5lZCB0byBjbGVhci4gKi9cblx0c2V0U3RhdHVzKGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkO1xuXG5cdC8qKiBTZXQgdGhlIHdvcmtpbmcvbG9hZGluZyBtZXNzYWdlIHNob3duIGR1cmluZyBzdHJlYW1pbmcuIENhbGwgd2l0aCBubyBhcmd1bWVudCB0byByZXN0b3JlIGRlZmF1bHQuICovXG5cdHNldFdvcmtpbmdNZXNzYWdlKG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkO1xuXG5cdC8qKiBTZXQgYSB3aWRnZXQgdG8gZGlzcGxheSBhYm92ZSBvciBiZWxvdyB0aGUgZWRpdG9yLiBBY2NlcHRzIHN0cmluZyBhcnJheSBvciBjb21wb25lbnQgZmFjdG9yeS4gKi9cblx0c2V0V2lkZ2V0KGtleTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IEV4dGVuc2lvbldpZGdldE9wdGlvbnMpOiB2b2lkO1xuXHRzZXRXaWRnZXQoXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0Y29udGVudDogKCh0dWk6IFRVSSwgdGhlbWU6IFRoZW1lKSA9PiBDb21wb25lbnQgJiB7IGRpc3Bvc2U/KCk6IHZvaWQgfSkgfCB1bmRlZmluZWQsXG5cdFx0b3B0aW9ucz86IEV4dGVuc2lvbldpZGdldE9wdGlvbnMsXG5cdCk6IHZvaWQ7XG5cblx0LyoqIFNldCBhIGN1c3RvbSBmb290ZXIgY29tcG9uZW50LCBvciB1bmRlZmluZWQgdG8gcmVzdG9yZSB0aGUgYnVpbHQtaW4gZm9vdGVyLlxuXHQgKlxuXHQgKiBUaGUgZmFjdG9yeSByZWNlaXZlcyBhIEZvb3RlckRhdGFQcm92aWRlciBmb3IgZGF0YSBub3Qgb3RoZXJ3aXNlIGFjY2Vzc2libGU6XG5cdCAqIGdpdCBicmFuY2ggYW5kIGV4dGVuc2lvbiBzdGF0dXNlcyBmcm9tIHNldFN0YXR1cygpLiBUb2tlbiBzdGF0cywgbW9kZWwgaW5mbyxcblx0ICogZXRjLiBhcmUgYXZhaWxhYmxlIHZpYSBjdHguc2Vzc2lvbk1hbmFnZXIgYW5kIGN0eC5tb2RlbC5cblx0ICovXG5cdHNldEZvb3Rlcihcblx0XHRmYWN0b3J5OlxuXHRcdFx0fCAoKHR1aTogVFVJLCB0aGVtZTogVGhlbWUsIGZvb3RlckRhdGE6IFJlYWRvbmx5Rm9vdGVyRGF0YVByb3ZpZGVyKSA9PiBDb21wb25lbnQgJiB7IGRpc3Bvc2U/KCk6IHZvaWQgfSlcblx0XHRcdHwgdW5kZWZpbmVkLFxuXHQpOiB2b2lkO1xuXG5cdC8qKiBTZXQgYSBjdXN0b20gaGVhZGVyIGNvbXBvbmVudCAoc2hvd24gYXQgc3RhcnR1cCwgYWJvdmUgY2hhdCksIG9yIHVuZGVmaW5lZCB0byByZXN0b3JlIHRoZSBidWlsdC1pbiBoZWFkZXIuICovXG5cdHNldEhlYWRlcihmYWN0b3J5OiAoKHR1aTogVFVJLCB0aGVtZTogVGhlbWUpID0+IENvbXBvbmVudCAmIHsgZGlzcG9zZT8oKTogdm9pZCB9KSB8IHVuZGVmaW5lZCk6IHZvaWQ7XG5cblx0LyoqIFNldCB0aGUgdGVybWluYWwgd2luZG93L3RhYiB0aXRsZS4gKi9cblx0c2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IHZvaWQ7XG5cblx0LyoqIFNob3cgYSBjdXN0b20gY29tcG9uZW50IHdpdGgga2V5Ym9hcmQgZm9jdXMuICovXG5cdGN1c3RvbTxUPihcblx0XHRmYWN0b3J5OiAoXG5cdFx0XHR0dWk6IFRVSSxcblx0XHRcdHRoZW1lOiBUaGVtZSxcblx0XHRcdGtleWJpbmRpbmdzOiBLZXliaW5kaW5nc01hbmFnZXIsXG5cdFx0XHRkb25lOiAocmVzdWx0OiBUKSA9PiB2b2lkLFxuXHRcdCkgPT4gKENvbXBvbmVudCAmIHsgZGlzcG9zZT8oKTogdm9pZCB9KSB8IFByb21pc2U8Q29tcG9uZW50ICYgeyBkaXNwb3NlPygpOiB2b2lkIH0+LFxuXHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRvdmVybGF5PzogYm9vbGVhbjtcblx0XHRcdC8qKiBPdmVybGF5IHBvc2l0aW9uaW5nL3NpemluZyBvcHRpb25zLiBDYW4gYmUgc3RhdGljIG9yIGEgZnVuY3Rpb24gZm9yIGR5bmFtaWMgdXBkYXRlcy4gKi9cblx0XHRcdG92ZXJsYXlPcHRpb25zPzogT3ZlcmxheU9wdGlvbnMgfCAoKCkgPT4gT3ZlcmxheU9wdGlvbnMpO1xuXHRcdFx0LyoqIENhbGxlZCB3aXRoIHRoZSBvdmVybGF5IGhhbmRsZSBhZnRlciB0aGUgb3ZlcmxheSBpcyBzaG93bi4gVXNlIHRvIGNvbnRyb2wgdmlzaWJpbGl0eS4gKi9cblx0XHRcdG9uSGFuZGxlPzogKGhhbmRsZTogT3ZlcmxheUhhbmRsZSkgPT4gdm9pZDtcblx0XHR9LFxuXHQpOiBQcm9taXNlPFQ+O1xuXG5cdC8qKiBQYXN0ZSB0ZXh0IGludG8gdGhlIGVkaXRvciwgdHJpZ2dlcmluZyBwYXN0ZSBoYW5kbGluZyAoY29sbGFwc2UgZm9yIGxhcmdlIGNvbnRlbnQpLiAqL1xuXHRwYXN0ZVRvRWRpdG9yKHRleHQ6IHN0cmluZyk6IHZvaWQ7XG5cblx0LyoqIFNldCB0aGUgdGV4dCBpbiB0aGUgY29yZSBpbnB1dCBlZGl0b3IuICovXG5cdHNldEVkaXRvclRleHQodGV4dDogc3RyaW5nKTogdm9pZDtcblxuXHQvKiogR2V0IHRoZSBjdXJyZW50IHRleHQgZnJvbSB0aGUgY29yZSBpbnB1dCBlZGl0b3IuICovXG5cdGdldEVkaXRvclRleHQoKTogc3RyaW5nO1xuXG5cdC8qKiBTaG93IGEgbXVsdGktbGluZSBlZGl0b3IgZm9yIHRleHQgZWRpdGluZy4gKi9cblx0ZWRpdG9yKHRpdGxlOiBzdHJpbmcsIHByZWZpbGw/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG5cblx0LyoqXG5cdCAqIFNldCBhIGN1c3RvbSBlZGl0b3IgY29tcG9uZW50IHZpYSBmYWN0b3J5IGZ1bmN0aW9uLlxuXHQgKiBQYXNzIHVuZGVmaW5lZCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGVkaXRvci5cblx0ICpcblx0ICogVGhlIGZhY3RvcnkgcmVjZWl2ZXM6XG5cdCAqIC0gYHRoZW1lYDogRWRpdG9yVGhlbWUgZm9yIHN0eWxpbmcgYm9yZGVycyBhbmQgYXV0b2NvbXBsZXRlXG5cdCAqIC0gYGtleWJpbmRpbmdzYDogS2V5YmluZGluZ3NNYW5hZ2VyIGZvciBhcHAtbGV2ZWwga2V5YmluZGluZ3Ncblx0ICpcblx0ICogRm9yIGZ1bGwgYXBwIGtleWJpbmRpbmcgc3VwcG9ydCAoZXNjYXBlLCBjdHJsK2QsIG1vZGVsIHN3aXRjaGluZywgZXRjLiksXG5cdCAqIGV4dGVuZCBgQ3VzdG9tRWRpdG9yYCBmcm9tIGBAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudGAgYW5kIGNhbGxcblx0ICogYHN1cGVyLmhhbmRsZUlucHV0KGRhdGEpYCBmb3Iga2V5cyB5b3UgZG9uJ3QgaGFuZGxlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0c1xuXHQgKiBpbXBvcnQgeyBDdXN0b21FZGl0b3IgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcblx0ICpcblx0ICogY2xhc3MgVmltRWRpdG9yIGV4dGVuZHMgQ3VzdG9tRWRpdG9yIHtcblx0ICogICBwcml2YXRlIG1vZGU6IFwibm9ybWFsXCIgfCBcImluc2VydFwiID0gXCJpbnNlcnRcIjtcblx0ICpcblx0ICogICBoYW5kbGVJbnB1dChkYXRhOiBzdHJpbmcpOiB2b2lkIHtcblx0ICogICAgIGlmICh0aGlzLm1vZGUgPT09IFwibm9ybWFsXCIpIHtcblx0ICogICAgICAgLy8gSGFuZGxlIHZpbSBub3JtYWwgbW9kZSBrZXlzLi4uXG5cdCAqICAgICAgIGlmIChkYXRhID09PSBcImlcIikgeyB0aGlzLm1vZGUgPSBcImluc2VydFwiOyByZXR1cm47IH1cblx0ICogICAgIH1cblx0ICogICAgIHN1cGVyLmhhbmRsZUlucHV0KGRhdGEpOyAgLy8gQXBwIGtleWJpbmRpbmdzICsgdGV4dCBlZGl0aW5nXG5cdCAqICAgfVxuXHQgKiB9XG5cdCAqXG5cdCAqIGN0eC51aS5zZXRFZGl0b3JDb21wb25lbnQoKHR1aSwgdGhlbWUsIGtleWJpbmRpbmdzKSA9PlxuXHQgKiAgIG5ldyBWaW1FZGl0b3IodHVpLCB0aGVtZSwga2V5YmluZGluZ3MpXG5cdCAqICk7XG5cdCAqIGBgYFxuXHQgKi9cblx0c2V0RWRpdG9yQ29tcG9uZW50KFxuXHRcdGZhY3Rvcnk6ICgodHVpOiBUVUksIHRoZW1lOiBFZGl0b3JUaGVtZSwga2V5YmluZGluZ3M6IEtleWJpbmRpbmdzTWFuYWdlcikgPT4gRWRpdG9yQ29tcG9uZW50KSB8IHVuZGVmaW5lZCxcblx0KTogdm9pZDtcblxuXHQvKiogR2V0IHRoZSBjdXJyZW50IHRoZW1lIGZvciBzdHlsaW5nLiAqL1xuXHRyZWFkb25seSB0aGVtZTogVGhlbWU7XG5cblx0LyoqIEdldCBhbGwgYXZhaWxhYmxlIHRoZW1lcyB3aXRoIHRoZWlyIG5hbWVzIGFuZCBmaWxlIHBhdGhzLiAqL1xuXHRnZXRBbGxUaGVtZXMoKTogeyBuYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCB9W107XG5cblx0LyoqIExvYWQgYSB0aGVtZSBieSBuYW1lIHdpdGhvdXQgc3dpdGNoaW5nIHRvIGl0LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuICovXG5cdGdldFRoZW1lKG5hbWU6IHN0cmluZyk6IFRoZW1lIHwgdW5kZWZpbmVkO1xuXG5cdC8qKiBTZXQgdGhlIGN1cnJlbnQgdGhlbWUgYnkgbmFtZSBvciBUaGVtZSBvYmplY3QuICovXG5cdHNldFRoZW1lKHRoZW1lOiBzdHJpbmcgfCBUaGVtZSk6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfTtcblxuXHQvKiogR2V0IGN1cnJlbnQgdG9vbCBvdXRwdXQgZXhwYW5zaW9uIHN0YXRlLiAqL1xuXHRnZXRUb29sc0V4cGFuZGVkKCk6IGJvb2xlYW47XG5cblx0LyoqIFNldCB0b29sIG91dHB1dCBleHBhbnNpb24gc3RhdGUuICovXG5cdHNldFRvb2xzRXhwYW5kZWQoZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFeHRlbnNpb24gQ29udGV4dFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRVc2FnZSB7XG5cdC8qKiBFc3RpbWF0ZWQgY29udGV4dCB0b2tlbnMsIG9yIG51bGwgaWYgdW5rbm93biAoZS5nLiByaWdodCBhZnRlciBjb21wYWN0aW9uLCBiZWZvcmUgbmV4dCBMTE0gcmVzcG9uc2UpLiAqL1xuXHR0b2tlbnM6IG51bWJlciB8IG51bGw7XG5cdGNvbnRleHRXaW5kb3c6IG51bWJlcjtcblx0LyoqIENvbnRleHQgdXNhZ2UgYXMgcGVyY2VudGFnZSBvZiBjb250ZXh0IHdpbmRvdywgb3IgbnVsbCBpZiB0b2tlbnMgaXMgdW5rbm93bi4gKi9cblx0cGVyY2VudDogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wYWN0T3B0aW9ucyB7XG5cdGN1c3RvbUluc3RydWN0aW9ucz86IHN0cmluZztcblx0b25Db21wbGV0ZT86IChyZXN1bHQ6IENvbXBhY3Rpb25SZXN1bHQpID0+IHZvaWQ7XG5cdG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIENvbnRleHQgcGFzc2VkIHRvIGV4dGVuc2lvbiBldmVudCBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25Db250ZXh0IHtcblx0LyoqIFVJIG1ldGhvZHMgZm9yIHVzZXIgaW50ZXJhY3Rpb24gKi9cblx0dWk6IEV4dGVuc2lvblVJQ29udGV4dDtcblx0LyoqIFdoZXRoZXIgVUkgaXMgYXZhaWxhYmxlIChmYWxzZSBpbiBwcmludC9SUEMgbW9kZSkgKi9cblx0aGFzVUk6IGJvb2xlYW47XG5cdC8qKiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICovXG5cdGN3ZDogc3RyaW5nO1xuXHQvKiogU2Vzc2lvbiBtYW5hZ2VyIChyZWFkLW9ubHkpICovXG5cdHNlc3Npb25NYW5hZ2VyOiBSZWFkb25seVNlc3Npb25NYW5hZ2VyO1xuXHQvKiogTW9kZWwgcmVnaXN0cnkgZm9yIEFQSSBrZXkgcmVzb2x1dGlvbiAqL1xuXHRtb2RlbFJlZ2lzdHJ5OiBNb2RlbFJlZ2lzdHJ5O1xuXHQvKiogQ3VycmVudCBtb2RlbCAobWF5IGJlIHVuZGVmaW5lZCkgKi9cblx0bW9kZWw6IE1vZGVsPGFueT4gfCB1bmRlZmluZWQ7XG5cdC8qKiBXaGV0aGVyIHRoZSBhZ2VudCBpcyBpZGxlIChub3Qgc3RyZWFtaW5nKSAqL1xuXHRpc0lkbGUoKTogYm9vbGVhbjtcblx0LyoqIEFib3J0IHRoZSBjdXJyZW50IGFnZW50IG9wZXJhdGlvbiAqL1xuXHRhYm9ydCgpOiB2b2lkO1xuXHQvKiogV2hldGhlciB0aGVyZSBhcmUgcXVldWVkIG1lc3NhZ2VzIHdhaXRpbmcgKi9cblx0aGFzUGVuZGluZ01lc3NhZ2VzKCk6IGJvb2xlYW47XG5cdC8qKiBHcmFjZWZ1bGx5IHNodXRkb3duIHBpIGFuZCBleGl0LiBBdmFpbGFibGUgaW4gYWxsIGNvbnRleHRzLiAqL1xuXHRzaHV0ZG93bigpOiB2b2lkO1xuXHQvKiogR2V0IGN1cnJlbnQgY29udGV4dCB1c2FnZSBmb3IgdGhlIGFjdGl2ZSBtb2RlbC4gKi9cblx0Z2V0Q29udGV4dFVzYWdlKCk6IENvbnRleHRVc2FnZSB8IHVuZGVmaW5lZDtcblx0LyoqIFRyaWdnZXIgY29tcGFjdGlvbiB3aXRob3V0IGF3YWl0aW5nIGNvbXBsZXRpb24uICovXG5cdGNvbXBhY3Qob3B0aW9ucz86IENvbXBhY3RPcHRpb25zKTogdm9pZDtcblx0LyoqIEdldCB0aGUgY3VycmVudCBlZmZlY3RpdmUgc3lzdGVtIHByb21wdC4gKi9cblx0Z2V0U3lzdGVtUHJvbXB0KCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBjb250ZXh0IGZvciBjb21tYW5kIGhhbmRsZXJzLlxuICogSW5jbHVkZXMgc2Vzc2lvbiBjb250cm9sIG1ldGhvZHMgb25seSBzYWZlIGluIHVzZXItaW5pdGlhdGVkIGNvbW1hbmRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbkNvbW1hbmRDb250ZXh0IGV4dGVuZHMgRXh0ZW5zaW9uQ29udGV4dCB7XG5cdC8qKiBXYWl0IGZvciB0aGUgYWdlbnQgdG8gZmluaXNoIHN0cmVhbWluZyAqL1xuXHR3YWl0Rm9ySWRsZSgpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKiBTdGFydCBhIG5ldyBzZXNzaW9uLCBvcHRpb25hbGx5IHdpdGggaW5pdGlhbGl6YXRpb24uICovXG5cdG5ld1Nlc3Npb24ob3B0aW9ucz86IHtcblx0XHRwYXJlbnRTZXNzaW9uPzogc3RyaW5nO1xuXHRcdHNldHVwPzogKHNlc3Npb25NYW5hZ2VyOiBTZXNzaW9uTWFuYWdlcikgPT4gUHJvbWlzZTx2b2lkPjtcblx0fSk6IFByb21pc2U8eyBjYW5jZWxsZWQ6IGJvb2xlYW4gfT47XG5cblx0LyoqIEZvcmsgZnJvbSBhIHNwZWNpZmljIGVudHJ5LCBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIGZpbGUuICovXG5cdGZvcmsoZW50cnlJZDogc3RyaW5nKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PjtcblxuXHQvKiogTmF2aWdhdGUgdG8gYSBkaWZmZXJlbnQgcG9pbnQgaW4gdGhlIHNlc3Npb24gdHJlZS4gKi9cblx0bmF2aWdhdGVUcmVlKFxuXHRcdHRhcmdldElkOiBzdHJpbmcsXG5cdFx0b3B0aW9ucz86IHsgc3VtbWFyaXplPzogYm9vbGVhbjsgY3VzdG9tSW5zdHJ1Y3Rpb25zPzogc3RyaW5nOyByZXBsYWNlSW5zdHJ1Y3Rpb25zPzogYm9vbGVhbjsgbGFiZWw/OiBzdHJpbmcgfSxcblx0KTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PjtcblxuXHQvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IHNlc3Npb24gZmlsZS4gKi9cblx0c3dpdGNoU2Vzc2lvbihzZXNzaW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PjtcblxuXHQvKiogUmVsb2FkIGV4dGVuc2lvbnMsIHNraWxscywgcHJvbXB0cywgYW5kIHRoZW1lcy4gKi9cblx0cmVsb2FkKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvb2wgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFJlbmRlcmluZyBvcHRpb25zIGZvciB0b29sIHJlc3VsdHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFJlbmRlclJlc3VsdE9wdGlvbnMge1xuXHQvKiogV2hldGhlciB0aGUgcmVzdWx0IHZpZXcgaXMgZXhwYW5kZWQgKi9cblx0ZXhwYW5kZWQ6IGJvb2xlYW47XG5cdC8qKiBXaGV0aGVyIHRoaXMgaXMgYSBwYXJ0aWFsL3N0cmVhbWluZyByZXN1bHQgKi9cblx0aXNQYXJ0aWFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRvb2wgZGVmaW5pdGlvbiBmb3IgcmVnaXN0ZXJUb29sKCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbERlZmluaXRpb248VFBhcmFtcyBleHRlbmRzIFRTY2hlbWEgPSBUU2NoZW1hLCBURGV0YWlscyA9IHVua25vd24+IHtcblx0LyoqIFRvb2wgbmFtZSAodXNlZCBpbiBMTE0gdG9vbCBjYWxscykgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIFVJICovXG5cdGxhYmVsOiBzdHJpbmc7XG5cdC8qKiBEZXNjcmlwdGlvbiBmb3IgTExNICovXG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdC8qKiBQYXJhbWV0ZXIgc2NoZW1hIChUeXBlQm94KSAqL1xuXHRwYXJhbWV0ZXJzOiBUUGFyYW1zO1xuXG5cdC8qKiBFeGVjdXRlIHRoZSB0b29sLiAqL1xuXHRleGVjdXRlKFxuXHRcdHRvb2xDYWxsSWQ6IHN0cmluZyxcblx0XHRwYXJhbXM6IFN0YXRpYzxUUGFyYW1zPixcblx0XHRzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkLFxuXHRcdG9uVXBkYXRlOiBBZ2VudFRvb2xVcGRhdGVDYWxsYmFjazxURGV0YWlscz4gfCB1bmRlZmluZWQsXG5cdFx0Y3R4OiBFeHRlbnNpb25Db250ZXh0LFxuXHQpOiBQcm9taXNlPEFnZW50VG9vbFJlc3VsdDxURGV0YWlscz4+O1xuXG5cdC8qKiBDdXN0b20gcmVuZGVyaW5nIGZvciB0b29sIGNhbGwgZGlzcGxheSAqL1xuXHRyZW5kZXJDYWxsPzogKGFyZ3M6IFN0YXRpYzxUUGFyYW1zPiwgdGhlbWU6IFRoZW1lKSA9PiBDb21wb25lbnQ7XG5cblx0LyoqIEN1c3RvbSByZW5kZXJpbmcgZm9yIHRvb2wgcmVzdWx0IGRpc3BsYXkgKi9cblx0cmVuZGVyUmVzdWx0PzogKHJlc3VsdDogQWdlbnRUb29sUmVzdWx0PFREZXRhaWxzPiwgb3B0aW9uczogVG9vbFJlbmRlclJlc3VsdE9wdGlvbnMsIHRoZW1lOiBUaGVtZSkgPT4gQ29tcG9uZW50O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSZXNvdXJjZSBFdmVudHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEZpcmVkIGFmdGVyIHNlc3Npb25fc3RhcnQgdG8gYWxsb3cgZXh0ZW5zaW9ucyB0byBwcm92aWRlIGFkZGl0aW9uYWwgcmVzb3VyY2UgcGF0aHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlc0Rpc2NvdmVyRXZlbnQge1xuXHR0eXBlOiBcInJlc291cmNlc19kaXNjb3ZlclwiO1xuXHRjd2Q6IHN0cmluZztcblx0cmVhc29uOiBcInN0YXJ0dXBcIiB8IFwicmVsb2FkXCI7XG59XG5cbi8qKiBSZXN1bHQgZnJvbSByZXNvdXJjZXNfZGlzY292ZXIgZXZlbnQgaGFuZGxlciAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZXNEaXNjb3ZlclJlc3VsdCB7XG5cdHNraWxsUGF0aHM/OiBzdHJpbmdbXTtcblx0cHJvbXB0UGF0aHM/OiBzdHJpbmdbXTtcblx0dGhlbWVQYXRocz86IHN0cmluZ1tdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXNzaW9uIEV2ZW50c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogRmlyZWQgb24gaW5pdGlhbCBzZXNzaW9uIGxvYWQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN0YXJ0RXZlbnQge1xuXHR0eXBlOiBcInNlc3Npb25fc3RhcnRcIjtcbn1cblxuLyoqIEZpcmVkIGJlZm9yZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciBzZXNzaW9uIChjYW4gYmUgY2FuY2VsbGVkKSAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQmVmb3JlU3dpdGNoRXZlbnQge1xuXHR0eXBlOiBcInNlc3Npb25fYmVmb3JlX3N3aXRjaFwiO1xuXHRyZWFzb246IFwibmV3XCIgfCBcInJlc3VtZVwiO1xuXHR0YXJnZXRTZXNzaW9uRmlsZT86IHN0cmluZztcbn1cblxuLyoqIEZpcmVkIGFmdGVyIHN3aXRjaGluZyB0byBhbm90aGVyIHNlc3Npb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN3aXRjaEV2ZW50IHtcblx0dHlwZTogXCJzZXNzaW9uX3N3aXRjaFwiO1xuXHRyZWFzb246IFwibmV3XCIgfCBcInJlc3VtZVwiO1xuXHRwcmV2aW91c1Nlc3Npb25GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBGaXJlZCBiZWZvcmUgZm9ya2luZyBhIHNlc3Npb24gKGNhbiBiZSBjYW5jZWxsZWQpICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25CZWZvcmVGb3JrRXZlbnQge1xuXHR0eXBlOiBcInNlc3Npb25fYmVmb3JlX2ZvcmtcIjtcblx0ZW50cnlJZDogc3RyaW5nO1xufVxuXG4vKiogRmlyZWQgYWZ0ZXIgZm9ya2luZyBhIHNlc3Npb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkZvcmtFdmVudCB7XG5cdHR5cGU6IFwic2Vzc2lvbl9mb3JrXCI7XG5cdHByZXZpb3VzU2Vzc2lvbkZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEZpcmVkIGJlZm9yZSBjb250ZXh0IGNvbXBhY3Rpb24gKGNhbiBiZSBjYW5jZWxsZWQgb3IgY3VzdG9taXplZCkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkJlZm9yZUNvbXBhY3RFdmVudCB7XG5cdHR5cGU6IFwic2Vzc2lvbl9iZWZvcmVfY29tcGFjdFwiO1xuXHRwcmVwYXJhdGlvbjogQ29tcGFjdGlvblByZXBhcmF0aW9uO1xuXHRicmFuY2hFbnRyaWVzOiBTZXNzaW9uRW50cnlbXTtcblx0Y3VzdG9tSW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXHRzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vKiogRmlyZWQgYWZ0ZXIgY29udGV4dCBjb21wYWN0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25Db21wYWN0RXZlbnQge1xuXHR0eXBlOiBcInNlc3Npb25fY29tcGFjdFwiO1xuXHRjb21wYWN0aW9uRW50cnk6IENvbXBhY3Rpb25FbnRyeTtcblx0ZnJvbUV4dGVuc2lvbjogYm9vbGVhbjtcbn1cblxuLyoqIEZpcmVkIG9uIHByb2Nlc3MgZXhpdCAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uU2h1dGRvd25FdmVudCB7XG5cdHR5cGU6IFwic2Vzc2lvbl9zaHV0ZG93blwiO1xufVxuXG4vKiogUHJlcGFyYXRpb24gZGF0YSBmb3IgdHJlZSBuYXZpZ2F0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVQcmVwYXJhdGlvbiB7XG5cdHRhcmdldElkOiBzdHJpbmc7XG5cdG9sZExlYWZJZDogc3RyaW5nIHwgbnVsbDtcblx0Y29tbW9uQW5jZXN0b3JJZDogc3RyaW5nIHwgbnVsbDtcblx0ZW50cmllc1RvU3VtbWFyaXplOiBTZXNzaW9uRW50cnlbXTtcblx0dXNlcldhbnRzU3VtbWFyeTogYm9vbGVhbjtcblx0LyoqIEN1c3RvbSBpbnN0cnVjdGlvbnMgZm9yIHN1bW1hcml6YXRpb24gKi9cblx0Y3VzdG9tSW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXHQvKiogSWYgdHJ1ZSwgY3VzdG9tSW5zdHJ1Y3Rpb25zIHJlcGxhY2VzIHRoZSBkZWZhdWx0IHByb21wdCBpbnN0ZWFkIG9mIGJlaW5nIGFwcGVuZGVkICovXG5cdHJlcGxhY2VJbnN0cnVjdGlvbnM/OiBib29sZWFuO1xuXHQvKiogTGFiZWwgdG8gYXR0YWNoIHRvIHRoZSBicmFuY2ggc3VtbWFyeSBlbnRyeSAqL1xuXHRsYWJlbD86IHN0cmluZztcbn1cblxuLyoqIEZpcmVkIGJlZm9yZSBuYXZpZ2F0aW5nIGluIHRoZSBzZXNzaW9uIHRyZWUgKGNhbiBiZSBjYW5jZWxsZWQpICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25CZWZvcmVUcmVlRXZlbnQge1xuXHR0eXBlOiBcInNlc3Npb25fYmVmb3JlX3RyZWVcIjtcblx0cHJlcGFyYXRpb246IFRyZWVQcmVwYXJhdGlvbjtcblx0c2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIEZpcmVkIGFmdGVyIG5hdmlnYXRpbmcgaW4gdGhlIHNlc3Npb24gdHJlZSAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHJlZUV2ZW50IHtcblx0dHlwZTogXCJzZXNzaW9uX3RyZWVcIjtcblx0bmV3TGVhZklkOiBzdHJpbmcgfCBudWxsO1xuXHRvbGRMZWFmSWQ6IHN0cmluZyB8IG51bGw7XG5cdHN1bW1hcnlFbnRyeT86IEJyYW5jaFN1bW1hcnlFbnRyeTtcblx0ZnJvbUV4dGVuc2lvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25FdmVudCA9XG5cdHwgU2Vzc2lvblN0YXJ0RXZlbnRcblx0fCBTZXNzaW9uQmVmb3JlU3dpdGNoRXZlbnRcblx0fCBTZXNzaW9uU3dpdGNoRXZlbnRcblx0fCBTZXNzaW9uQmVmb3JlRm9ya0V2ZW50XG5cdHwgU2Vzc2lvbkZvcmtFdmVudFxuXHR8IFNlc3Npb25CZWZvcmVDb21wYWN0RXZlbnRcblx0fCBTZXNzaW9uQ29tcGFjdEV2ZW50XG5cdHwgU2Vzc2lvblNodXRkb3duRXZlbnRcblx0fCBTZXNzaW9uQmVmb3JlVHJlZUV2ZW50XG5cdHwgU2Vzc2lvblRyZWVFdmVudDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQWdlbnQgRXZlbnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBGaXJlZCBiZWZvcmUgZWFjaCBMTE0gY2FsbC4gQ2FuIG1vZGlmeSBtZXNzYWdlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dEV2ZW50IHtcblx0dHlwZTogXCJjb250ZXh0XCI7XG5cdG1lc3NhZ2VzOiBBZ2VudE1lc3NhZ2VbXTtcbn1cblxuLyoqIEZpcmVkIGFmdGVyIHVzZXIgc3VibWl0cyBwcm9tcHQgYnV0IGJlZm9yZSBhZ2VudCBsb29wLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCZWZvcmVBZ2VudFN0YXJ0RXZlbnQge1xuXHR0eXBlOiBcImJlZm9yZV9hZ2VudF9zdGFydFwiO1xuXHRwcm9tcHQ6IHN0cmluZztcblx0aW1hZ2VzPzogSW1hZ2VDb250ZW50W107XG5cdHN5c3RlbVByb21wdDogc3RyaW5nO1xufVxuXG4vKiogRmlyZWQgd2hlbiBhbiBhZ2VudCBsb29wIHN0YXJ0cyAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudFN0YXJ0RXZlbnQge1xuXHR0eXBlOiBcImFnZW50X3N0YXJ0XCI7XG59XG5cbi8qKiBGaXJlZCB3aGVuIGFuIGFnZW50IGxvb3AgZW5kcyAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudEVuZEV2ZW50IHtcblx0dHlwZTogXCJhZ2VudF9lbmRcIjtcblx0bWVzc2FnZXM6IEFnZW50TWVzc2FnZVtdO1xufVxuXG4vKiogRmlyZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggdHVybiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdXJuU3RhcnRFdmVudCB7XG5cdHR5cGU6IFwidHVybl9zdGFydFwiO1xuXHR0dXJuSW5kZXg6IG51bWJlcjtcblx0dGltZXN0YW1wOiBudW1iZXI7XG59XG5cbi8qKiBGaXJlZCBhdCB0aGUgZW5kIG9mIGVhY2ggdHVybiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdXJuRW5kRXZlbnQge1xuXHR0eXBlOiBcInR1cm5fZW5kXCI7XG5cdHR1cm5JbmRleDogbnVtYmVyO1xuXHRtZXNzYWdlOiBBZ2VudE1lc3NhZ2U7XG5cdHRvb2xSZXN1bHRzOiBUb29sUmVzdWx0TWVzc2FnZVtdO1xufVxuXG4vKiogRmlyZWQgd2hlbiBhIG1lc3NhZ2Ugc3RhcnRzICh1c2VyLCBhc3Npc3RhbnQsIG9yIHRvb2xSZXN1bHQpICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VTdGFydEV2ZW50IHtcblx0dHlwZTogXCJtZXNzYWdlX3N0YXJ0XCI7XG5cdG1lc3NhZ2U6IEFnZW50TWVzc2FnZTtcbn1cblxuLyoqIEZpcmVkIGR1cmluZyBhc3Npc3RhbnQgbWVzc2FnZSBzdHJlYW1pbmcgd2l0aCB0b2tlbi1ieS10b2tlbiB1cGRhdGVzICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VVcGRhdGVFdmVudCB7XG5cdHR5cGU6IFwibWVzc2FnZV91cGRhdGVcIjtcblx0bWVzc2FnZTogQWdlbnRNZXNzYWdlO1xuXHRhc3Npc3RhbnRNZXNzYWdlRXZlbnQ6IEFzc2lzdGFudE1lc3NhZ2VFdmVudDtcbn1cblxuLyoqIEZpcmVkIHdoZW4gYSBtZXNzYWdlIGVuZHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUVuZEV2ZW50IHtcblx0dHlwZTogXCJtZXNzYWdlX2VuZFwiO1xuXHRtZXNzYWdlOiBBZ2VudE1lc3NhZ2U7XG59XG5cbi8qKiBGaXJlZCB3aGVuIGEgdG9vbCBzdGFydHMgZXhlY3V0aW5nICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xFeGVjdXRpb25TdGFydEV2ZW50IHtcblx0dHlwZTogXCJ0b29sX2V4ZWN1dGlvbl9zdGFydFwiO1xuXHR0b29sQ2FsbElkOiBzdHJpbmc7XG5cdHRvb2xOYW1lOiBzdHJpbmc7XG5cdGFyZ3M6IGFueTtcbn1cblxuLyoqIEZpcmVkIGR1cmluZyB0b29sIGV4ZWN1dGlvbiB3aXRoIHBhcnRpYWwvc3RyZWFtaW5nIG91dHB1dCAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sRXhlY3V0aW9uVXBkYXRlRXZlbnQge1xuXHR0eXBlOiBcInRvb2xfZXhlY3V0aW9uX3VwZGF0ZVwiO1xuXHR0b29sQ2FsbElkOiBzdHJpbmc7XG5cdHRvb2xOYW1lOiBzdHJpbmc7XG5cdGFyZ3M6IGFueTtcblx0cGFydGlhbFJlc3VsdDogYW55O1xufVxuXG4vKiogRmlyZWQgd2hlbiBhIHRvb2wgZmluaXNoZXMgZXhlY3V0aW5nICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xFeGVjdXRpb25FbmRFdmVudCB7XG5cdHR5cGU6IFwidG9vbF9leGVjdXRpb25fZW5kXCI7XG5cdHRvb2xDYWxsSWQ6IHN0cmluZztcblx0dG9vbE5hbWU6IHN0cmluZztcblx0cmVzdWx0OiBhbnk7XG5cdGlzRXJyb3I6IGJvb2xlYW47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1vZGVsIEV2ZW50c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBNb2RlbFNlbGVjdFNvdXJjZSA9IFwic2V0XCIgfCBcImN5Y2xlXCIgfCBcInJlc3RvcmVcIjtcblxuLyoqIEZpcmVkIHdoZW4gYSBuZXcgbW9kZWwgaXMgc2VsZWN0ZWQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxTZWxlY3RFdmVudCB7XG5cdHR5cGU6IFwibW9kZWxfc2VsZWN0XCI7XG5cdG1vZGVsOiBNb2RlbDxhbnk+O1xuXHRwcmV2aW91c01vZGVsOiBNb2RlbDxhbnk+IHwgdW5kZWZpbmVkO1xuXHRzb3VyY2U6IE1vZGVsU2VsZWN0U291cmNlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVc2VyIEJhc2ggRXZlbnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBGaXJlZCB3aGVuIHVzZXIgZXhlY3V0ZXMgYSBiYXNoIGNvbW1hbmQgdmlhICEgb3IgISEgcHJlZml4ICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJCYXNoRXZlbnQge1xuXHR0eXBlOiBcInVzZXJfYmFzaFwiO1xuXHQvKiogVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSAqL1xuXHRjb21tYW5kOiBzdHJpbmc7XG5cdC8qKiBUcnVlIGlmICEhIHByZWZpeCB3YXMgdXNlZCAoZXhjbHVkZWQgZnJvbSBMTE0gY29udGV4dCkgKi9cblx0ZXhjbHVkZUZyb21Db250ZXh0OiBib29sZWFuO1xuXHQvKiogQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAqL1xuXHRjd2Q6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5wdXQgRXZlbnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBTb3VyY2Ugb2YgdXNlciBpbnB1dCAqL1xuZXhwb3J0IHR5cGUgSW5wdXRTb3VyY2UgPSBcImludGVyYWN0aXZlXCIgfCBcInJwY1wiIHwgXCJleHRlbnNpb25cIjtcblxuLyoqIEZpcmVkIHdoZW4gdXNlciBpbnB1dCBpcyByZWNlaXZlZCwgYmVmb3JlIGFnZW50IHByb2Nlc3NpbmcgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRFdmVudCB7XG5cdHR5cGU6IFwiaW5wdXRcIjtcblx0LyoqIFRoZSBpbnB1dCB0ZXh0ICovXG5cdHRleHQ6IHN0cmluZztcblx0LyoqIEF0dGFjaGVkIGltYWdlcywgaWYgYW55ICovXG5cdGltYWdlcz86IEltYWdlQ29udGVudFtdO1xuXHQvKiogV2hlcmUgdGhlIGlucHV0IGNhbWUgZnJvbSAqL1xuXHRzb3VyY2U6IElucHV0U291cmNlO1xufVxuXG4vKiogUmVzdWx0IGZyb20gaW5wdXQgZXZlbnQgaGFuZGxlciAqL1xuZXhwb3J0IHR5cGUgSW5wdXRFdmVudFJlc3VsdCA9XG5cdHwgeyBhY3Rpb246IFwiY29udGludWVcIiB9XG5cdHwgeyBhY3Rpb246IFwidHJhbnNmb3JtXCI7IHRleHQ6IHN0cmluZzsgaW1hZ2VzPzogSW1hZ2VDb250ZW50W10gfVxuXHR8IHsgYWN0aW9uOiBcImhhbmRsZWRcIiB9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUb29sIEV2ZW50c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgVG9vbENhbGxFdmVudEJhc2Uge1xuXHR0eXBlOiBcInRvb2xfY2FsbFwiO1xuXHR0b29sQ2FsbElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaFRvb2xDYWxsRXZlbnQgZXh0ZW5kcyBUb29sQ2FsbEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcImJhc2hcIjtcblx0aW5wdXQ6IEJhc2hUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFRvb2xDYWxsRXZlbnQgZXh0ZW5kcyBUb29sQ2FsbEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcInJlYWRcIjtcblx0aW5wdXQ6IFJlYWRUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFRvb2xDYWxsRXZlbnQgZXh0ZW5kcyBUb29sQ2FsbEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcImVkaXRcIjtcblx0aW5wdXQ6IEVkaXRUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVUb29sQ2FsbEV2ZW50IGV4dGVuZHMgVG9vbENhbGxFdmVudEJhc2Uge1xuXHR0b29sTmFtZTogXCJ3cml0ZVwiO1xuXHRpbnB1dDogV3JpdGVUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JlcFRvb2xDYWxsRXZlbnQgZXh0ZW5kcyBUb29sQ2FsbEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcImdyZXBcIjtcblx0aW5wdXQ6IEdyZXBUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmluZFRvb2xDYWxsRXZlbnQgZXh0ZW5kcyBUb29sQ2FsbEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcImZpbmRcIjtcblx0aW5wdXQ6IEZpbmRUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTHNUb29sQ2FsbEV2ZW50IGV4dGVuZHMgVG9vbENhbGxFdmVudEJhc2Uge1xuXHR0b29sTmFtZTogXCJsc1wiO1xuXHRpbnB1dDogTHNUb29sSW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tVG9vbENhbGxFdmVudCBleHRlbmRzIFRvb2xDYWxsRXZlbnRCYXNlIHtcblx0dG9vbE5hbWU6IHN0cmluZztcblx0aW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogRmlyZWQgYmVmb3JlIGEgdG9vbCBleGVjdXRlcy4gQ2FuIGJsb2NrLiAqL1xuZXhwb3J0IHR5cGUgVG9vbENhbGxFdmVudCA9XG5cdHwgQmFzaFRvb2xDYWxsRXZlbnRcblx0fCBSZWFkVG9vbENhbGxFdmVudFxuXHR8IEVkaXRUb29sQ2FsbEV2ZW50XG5cdHwgV3JpdGVUb29sQ2FsbEV2ZW50XG5cdHwgR3JlcFRvb2xDYWxsRXZlbnRcblx0fCBGaW5kVG9vbENhbGxFdmVudFxuXHR8IExzVG9vbENhbGxFdmVudFxuXHR8IEN1c3RvbVRvb2xDYWxsRXZlbnQ7XG5cbmludGVyZmFjZSBUb29sUmVzdWx0RXZlbnRCYXNlIHtcblx0dHlwZTogXCJ0b29sX3Jlc3VsdFwiO1xuXHR0b29sQ2FsbElkOiBzdHJpbmc7XG5cdGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0Y29udGVudDogKFRleHRDb250ZW50IHwgSW1hZ2VDb250ZW50KVtdO1xuXHRpc0Vycm9yOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2hUb29sUmVzdWx0RXZlbnQgZXh0ZW5kcyBUb29sUmVzdWx0RXZlbnRCYXNlIHtcblx0dG9vbE5hbWU6IFwiYmFzaFwiO1xuXHRkZXRhaWxzOiBCYXNoVG9vbERldGFpbHMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFRvb2xSZXN1bHRFdmVudCBleHRlbmRzIFRvb2xSZXN1bHRFdmVudEJhc2Uge1xuXHR0b29sTmFtZTogXCJyZWFkXCI7XG5cdGRldGFpbHM6IFJlYWRUb29sRGV0YWlscyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFZGl0VG9vbFJlc3VsdEV2ZW50IGV4dGVuZHMgVG9vbFJlc3VsdEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcImVkaXRcIjtcblx0ZGV0YWlsczogRWRpdFRvb2xEZXRhaWxzIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlVG9vbFJlc3VsdEV2ZW50IGV4dGVuZHMgVG9vbFJlc3VsdEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcIndyaXRlXCI7XG5cdGRldGFpbHM6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmVwVG9vbFJlc3VsdEV2ZW50IGV4dGVuZHMgVG9vbFJlc3VsdEV2ZW50QmFzZSB7XG5cdHRvb2xOYW1lOiBcImdyZXBcIjtcblx0ZGV0YWlsczogR3JlcFRvb2xEZXRhaWxzIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRUb29sUmVzdWx0RXZlbnQgZXh0ZW5kcyBUb29sUmVzdWx0RXZlbnRCYXNlIHtcblx0dG9vbE5hbWU6IFwiZmluZFwiO1xuXHRkZXRhaWxzOiBGaW5kVG9vbERldGFpbHMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTHNUb29sUmVzdWx0RXZlbnQgZXh0ZW5kcyBUb29sUmVzdWx0RXZlbnRCYXNlIHtcblx0dG9vbE5hbWU6IFwibHNcIjtcblx0ZGV0YWlsczogTHNUb29sRGV0YWlscyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Ub29sUmVzdWx0RXZlbnQgZXh0ZW5kcyBUb29sUmVzdWx0RXZlbnRCYXNlIHtcblx0dG9vbE5hbWU6IHN0cmluZztcblx0ZGV0YWlsczogdW5rbm93bjtcbn1cblxuLyoqIEZpcmVkIGFmdGVyIGEgdG9vbCBleGVjdXRlcy4gQ2FuIG1vZGlmeSByZXN1bHQuICovXG5leHBvcnQgdHlwZSBUb29sUmVzdWx0RXZlbnQgPVxuXHR8IEJhc2hUb29sUmVzdWx0RXZlbnRcblx0fCBSZWFkVG9vbFJlc3VsdEV2ZW50XG5cdHwgRWRpdFRvb2xSZXN1bHRFdmVudFxuXHR8IFdyaXRlVG9vbFJlc3VsdEV2ZW50XG5cdHwgR3JlcFRvb2xSZXN1bHRFdmVudFxuXHR8IEZpbmRUb29sUmVzdWx0RXZlbnRcblx0fCBMc1Rvb2xSZXN1bHRFdmVudFxuXHR8IEN1c3RvbVRvb2xSZXN1bHRFdmVudDtcblxuLy8gVHlwZSBndWFyZHMgZm9yIFRvb2xSZXN1bHRFdmVudFxuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzaFRvb2xSZXN1bHQoZTogVG9vbFJlc3VsdEV2ZW50KTogZSBpcyBCYXNoVG9vbFJlc3VsdEV2ZW50IHtcblx0cmV0dXJuIGUudG9vbE5hbWUgPT09IFwiYmFzaFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZFRvb2xSZXN1bHQoZTogVG9vbFJlc3VsdEV2ZW50KTogZSBpcyBSZWFkVG9vbFJlc3VsdEV2ZW50IHtcblx0cmV0dXJuIGUudG9vbE5hbWUgPT09IFwicmVhZFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRWRpdFRvb2xSZXN1bHQoZTogVG9vbFJlc3VsdEV2ZW50KTogZSBpcyBFZGl0VG9vbFJlc3VsdEV2ZW50IHtcblx0cmV0dXJuIGUudG9vbE5hbWUgPT09IFwiZWRpdFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzV3JpdGVUb29sUmVzdWx0KGU6IFRvb2xSZXN1bHRFdmVudCk6IGUgaXMgV3JpdGVUb29sUmVzdWx0RXZlbnQge1xuXHRyZXR1cm4gZS50b29sTmFtZSA9PT0gXCJ3cml0ZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR3JlcFRvb2xSZXN1bHQoZTogVG9vbFJlc3VsdEV2ZW50KTogZSBpcyBHcmVwVG9vbFJlc3VsdEV2ZW50IHtcblx0cmV0dXJuIGUudG9vbE5hbWUgPT09IFwiZ3JlcFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRmluZFRvb2xSZXN1bHQoZTogVG9vbFJlc3VsdEV2ZW50KTogZSBpcyBGaW5kVG9vbFJlc3VsdEV2ZW50IHtcblx0cmV0dXJuIGUudG9vbE5hbWUgPT09IFwiZmluZFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTHNUb29sUmVzdWx0KGU6IFRvb2xSZXN1bHRFdmVudCk6IGUgaXMgTHNUb29sUmVzdWx0RXZlbnQge1xuXHRyZXR1cm4gZS50b29sTmFtZSA9PT0gXCJsc1wiO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgZm9yIG5hcnJvd2luZyBUb29sQ2FsbEV2ZW50IGJ5IHRvb2wgbmFtZS5cbiAqXG4gKiBCdWlsdC1pbiB0b29scyBuYXJyb3cgYXV0b21hdGljYWxseSAobm8gdHlwZSBwYXJhbXMgbmVlZGVkKTpcbiAqIGBgYHRzXG4gKiBpZiAoaXNUb29sQ2FsbEV2ZW50VHlwZShcImJhc2hcIiwgZXZlbnQpKSB7XG4gKiAgIGV2ZW50LmlucHV0LmNvbW1hbmQ7ICAvLyBzdHJpbmdcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEN1c3RvbSB0b29scyByZXF1aXJlIGV4cGxpY2l0IHR5cGUgcGFyYW1ldGVyczpcbiAqIGBgYHRzXG4gKiBpZiAoaXNUb29sQ2FsbEV2ZW50VHlwZTxcIm15X3Rvb2xcIiwgTXlUb29sSW5wdXQ+KFwibXlfdG9vbFwiLCBldmVudCkpIHtcbiAqICAgZXZlbnQuaW5wdXQuYWN0aW9uOyAgLy8gdHlwZWRcbiAqIH1cbiAqIGBgYFxuICpcbiAqIE5vdGU6IERpcmVjdCBuYXJyb3dpbmcgdmlhIGBldmVudC50b29sTmFtZSA9PT0gXCJiYXNoXCJgIGRvZXNuJ3Qgd29yayBiZWNhdXNlXG4gKiBDdXN0b21Ub29sQ2FsbEV2ZW50LnRvb2xOYW1lIGlzIGBzdHJpbmdgIHdoaWNoIG92ZXJsYXBzIHdpdGggYWxsIGxpdGVyYWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb29sQ2FsbEV2ZW50VHlwZSh0b29sTmFtZTogXCJiYXNoXCIsIGV2ZW50OiBUb29sQ2FsbEV2ZW50KTogZXZlbnQgaXMgQmFzaFRvb2xDYWxsRXZlbnQ7XG5leHBvcnQgZnVuY3Rpb24gaXNUb29sQ2FsbEV2ZW50VHlwZSh0b29sTmFtZTogXCJyZWFkXCIsIGV2ZW50OiBUb29sQ2FsbEV2ZW50KTogZXZlbnQgaXMgUmVhZFRvb2xDYWxsRXZlbnQ7XG5leHBvcnQgZnVuY3Rpb24gaXNUb29sQ2FsbEV2ZW50VHlwZSh0b29sTmFtZTogXCJlZGl0XCIsIGV2ZW50OiBUb29sQ2FsbEV2ZW50KTogZXZlbnQgaXMgRWRpdFRvb2xDYWxsRXZlbnQ7XG5leHBvcnQgZnVuY3Rpb24gaXNUb29sQ2FsbEV2ZW50VHlwZSh0b29sTmFtZTogXCJ3cml0ZVwiLCBldmVudDogVG9vbENhbGxFdmVudCk6IGV2ZW50IGlzIFdyaXRlVG9vbENhbGxFdmVudDtcbmV4cG9ydCBmdW5jdGlvbiBpc1Rvb2xDYWxsRXZlbnRUeXBlKHRvb2xOYW1lOiBcImdyZXBcIiwgZXZlbnQ6IFRvb2xDYWxsRXZlbnQpOiBldmVudCBpcyBHcmVwVG9vbENhbGxFdmVudDtcbmV4cG9ydCBmdW5jdGlvbiBpc1Rvb2xDYWxsRXZlbnRUeXBlKHRvb2xOYW1lOiBcImZpbmRcIiwgZXZlbnQ6IFRvb2xDYWxsRXZlbnQpOiBldmVudCBpcyBGaW5kVG9vbENhbGxFdmVudDtcbmV4cG9ydCBmdW5jdGlvbiBpc1Rvb2xDYWxsRXZlbnRUeXBlKHRvb2xOYW1lOiBcImxzXCIsIGV2ZW50OiBUb29sQ2FsbEV2ZW50KTogZXZlbnQgaXMgTHNUb29sQ2FsbEV2ZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGlzVG9vbENhbGxFdmVudFR5cGU8VE5hbWUgZXh0ZW5kcyBzdHJpbmcsIFRJbnB1dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihcblx0dG9vbE5hbWU6IFROYW1lLFxuXHRldmVudDogVG9vbENhbGxFdmVudCxcbik6IGV2ZW50IGlzIFRvb2xDYWxsRXZlbnQgJiB7IHRvb2xOYW1lOiBUTmFtZTsgaW5wdXQ6IFRJbnB1dCB9O1xuZXhwb3J0IGZ1bmN0aW9uIGlzVG9vbENhbGxFdmVudFR5cGUodG9vbE5hbWU6IHN0cmluZywgZXZlbnQ6IFRvb2xDYWxsRXZlbnQpOiBib29sZWFuIHtcblx0cmV0dXJuIGV2ZW50LnRvb2xOYW1lID09PSB0b29sTmFtZTtcbn1cblxuLyoqIFVuaW9uIG9mIGFsbCBldmVudCB0eXBlcyAqL1xuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uRXZlbnQgPVxuXHR8IFJlc291cmNlc0Rpc2NvdmVyRXZlbnRcblx0fCBTZXNzaW9uRXZlbnRcblx0fCBDb250ZXh0RXZlbnRcblx0fCBCZWZvcmVBZ2VudFN0YXJ0RXZlbnRcblx0fCBBZ2VudFN0YXJ0RXZlbnRcblx0fCBBZ2VudEVuZEV2ZW50XG5cdHwgVHVyblN0YXJ0RXZlbnRcblx0fCBUdXJuRW5kRXZlbnRcblx0fCBNZXNzYWdlU3RhcnRFdmVudFxuXHR8IE1lc3NhZ2VVcGRhdGVFdmVudFxuXHR8IE1lc3NhZ2VFbmRFdmVudFxuXHR8IFRvb2xFeGVjdXRpb25TdGFydEV2ZW50XG5cdHwgVG9vbEV4ZWN1dGlvblVwZGF0ZUV2ZW50XG5cdHwgVG9vbEV4ZWN1dGlvbkVuZEV2ZW50XG5cdHwgTW9kZWxTZWxlY3RFdmVudFxuXHR8IFVzZXJCYXNoRXZlbnRcblx0fCBJbnB1dEV2ZW50XG5cdHwgVG9vbENhbGxFdmVudFxuXHR8IFRvb2xSZXN1bHRFdmVudDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXZlbnQgUmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRFdmVudFJlc3VsdCB7XG5cdG1lc3NhZ2VzPzogQWdlbnRNZXNzYWdlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbENhbGxFdmVudFJlc3VsdCB7XG5cdGJsb2NrPzogYm9vbGVhbjtcblx0cmVhc29uPzogc3RyaW5nO1xufVxuXG4vKiogUmVzdWx0IGZyb20gdXNlcl9iYXNoIGV2ZW50IGhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckJhc2hFdmVudFJlc3VsdCB7XG5cdC8qKiBDdXN0b20gb3BlcmF0aW9ucyB0byB1c2UgZm9yIGV4ZWN1dGlvbiAqL1xuXHRvcGVyYXRpb25zPzogQmFzaE9wZXJhdGlvbnM7XG5cdC8qKiBGdWxsIHJlcGxhY2VtZW50OiBleHRlbnNpb24gaGFuZGxlZCBleGVjdXRpb24sIHVzZSB0aGlzIHJlc3VsdCAqL1xuXHRyZXN1bHQ/OiBCYXNoUmVzdWx0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xSZXN1bHRFdmVudFJlc3VsdCB7XG5cdGNvbnRlbnQ/OiAoVGV4dENvbnRlbnQgfCBJbWFnZUNvbnRlbnQpW107XG5cdGRldGFpbHM/OiB1bmtub3duO1xuXHRpc0Vycm9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCZWZvcmVBZ2VudFN0YXJ0RXZlbnRSZXN1bHQge1xuXHRtZXNzYWdlPzogUGljazxDdXN0b21NZXNzYWdlLCBcImN1c3RvbVR5cGVcIiB8IFwiY29udGVudFwiIHwgXCJkaXNwbGF5XCIgfCBcImRldGFpbHNcIj47XG5cdC8qKiBSZXBsYWNlIHRoZSBzeXN0ZW0gcHJvbXB0IGZvciB0aGlzIHR1cm4uIElmIG11bHRpcGxlIGV4dGVuc2lvbnMgcmV0dXJuIHRoaXMsIHRoZXkgYXJlIGNoYWluZWQuICovXG5cdHN5c3RlbVByb21wdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQmVmb3JlU3dpdGNoUmVzdWx0IHtcblx0Y2FuY2VsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQmVmb3JlRm9ya1Jlc3VsdCB7XG5cdGNhbmNlbD86IGJvb2xlYW47XG5cdHNraXBDb252ZXJzYXRpb25SZXN0b3JlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQmVmb3JlQ29tcGFjdFJlc3VsdCB7XG5cdGNhbmNlbD86IGJvb2xlYW47XG5cdGNvbXBhY3Rpb24/OiBDb21wYWN0aW9uUmVzdWx0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25CZWZvcmVUcmVlUmVzdWx0IHtcblx0Y2FuY2VsPzogYm9vbGVhbjtcblx0c3VtbWFyeT86IHtcblx0XHRzdW1tYXJ5OiBzdHJpbmc7XG5cdFx0ZGV0YWlscz86IHVua25vd247XG5cdH07XG5cdC8qKiBPdmVycmlkZSBjdXN0b20gaW5zdHJ1Y3Rpb25zIGZvciBzdW1tYXJpemF0aW9uICovXG5cdGN1c3RvbUluc3RydWN0aW9ucz86IHN0cmluZztcblx0LyoqIE92ZXJyaWRlIHdoZXRoZXIgY3VzdG9tSW5zdHJ1Y3Rpb25zIHJlcGxhY2VzIHRoZSBkZWZhdWx0IHByb21wdCAqL1xuXHRyZXBsYWNlSW5zdHJ1Y3Rpb25zPzogYm9vbGVhbjtcblx0LyoqIE92ZXJyaWRlIGxhYmVsIHRvIGF0dGFjaCB0byB0aGUgYnJhbmNoIHN1bW1hcnkgZW50cnkgKi9cblx0bGFiZWw/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1lc3NhZ2UgUmVuZGVyaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVJlbmRlck9wdGlvbnMge1xuXHRleHBhbmRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZVJlbmRlcmVyPFQgPSB1bmtub3duPiA9IChcblx0bWVzc2FnZTogQ3VzdG9tTWVzc2FnZTxUPixcblx0b3B0aW9uczogTWVzc2FnZVJlbmRlck9wdGlvbnMsXG5cdHRoZW1lOiBUaGVtZSxcbikgPT4gQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kIFJlZ2lzdHJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyZWRDb21tYW5kIHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0Z2V0QXJndW1lbnRDb21wbGV0aW9ucz86IChhcmd1bWVudFByZWZpeDogc3RyaW5nKSA9PiBBdXRvY29tcGxldGVJdGVtW10gfCBudWxsO1xuXHRoYW5kbGVyOiAoYXJnczogc3RyaW5nLCBjdHg6IEV4dGVuc2lvbkNvbW1hbmRDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFeHRlbnNpb24gQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBIYW5kbGVyIGZ1bmN0aW9uIHR5cGUgZm9yIGV2ZW50cyAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbmZ1c2luZ1ZvaWRUeXBlOiB2b2lkIGFsbG93cyBiYXJlIHJldHVybiBzdGF0ZW1lbnRzXG5leHBvcnQgdHlwZSBFeHRlbnNpb25IYW5kbGVyPEUsIFIgPSB1bmRlZmluZWQ+ID0gKGV2ZW50OiBFLCBjdHg6IEV4dGVuc2lvbkNvbnRleHQpID0+IFByb21pc2U8UiB8IHZvaWQ+IHwgUiB8IHZvaWQ7XG5cbi8qKlxuICogRXh0ZW5zaW9uQVBJIHBhc3NlZCB0byBleHRlbnNpb24gZmFjdG9yeSBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uQVBJIHtcblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHQvLyBFdmVudCBTdWJzY3JpcHRpb25cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cdG9uKGV2ZW50OiBcInJlc291cmNlc19kaXNjb3ZlclwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFJlc291cmNlc0Rpc2NvdmVyRXZlbnQsIFJlc291cmNlc0Rpc2NvdmVyUmVzdWx0Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInNlc3Npb25fc3RhcnRcIiwgaGFuZGxlcjogRXh0ZW5zaW9uSGFuZGxlcjxTZXNzaW9uU3RhcnRFdmVudD4pOiB2b2lkO1xuXHRvbihcblx0XHRldmVudDogXCJzZXNzaW9uX2JlZm9yZV9zd2l0Y2hcIixcblx0XHRoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFNlc3Npb25CZWZvcmVTd2l0Y2hFdmVudCwgU2Vzc2lvbkJlZm9yZVN3aXRjaFJlc3VsdD4sXG5cdCk6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInNlc3Npb25fc3dpdGNoXCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8U2Vzc2lvblN3aXRjaEV2ZW50Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInNlc3Npb25fYmVmb3JlX2ZvcmtcIiwgaGFuZGxlcjogRXh0ZW5zaW9uSGFuZGxlcjxTZXNzaW9uQmVmb3JlRm9ya0V2ZW50LCBTZXNzaW9uQmVmb3JlRm9ya1Jlc3VsdD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJzZXNzaW9uX2ZvcmtcIiwgaGFuZGxlcjogRXh0ZW5zaW9uSGFuZGxlcjxTZXNzaW9uRm9ya0V2ZW50Pik6IHZvaWQ7XG5cdG9uKFxuXHRcdGV2ZW50OiBcInNlc3Npb25fYmVmb3JlX2NvbXBhY3RcIixcblx0XHRoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFNlc3Npb25CZWZvcmVDb21wYWN0RXZlbnQsIFNlc3Npb25CZWZvcmVDb21wYWN0UmVzdWx0Pixcblx0KTogdm9pZDtcblx0b24oZXZlbnQ6IFwic2Vzc2lvbl9jb21wYWN0XCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8U2Vzc2lvbkNvbXBhY3RFdmVudD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJzZXNzaW9uX3NodXRkb3duXCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8U2Vzc2lvblNodXRkb3duRXZlbnQ+KTogdm9pZDtcblx0b24oZXZlbnQ6IFwic2Vzc2lvbl9iZWZvcmVfdHJlZVwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFNlc3Npb25CZWZvcmVUcmVlRXZlbnQsIFNlc3Npb25CZWZvcmVUcmVlUmVzdWx0Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInNlc3Npb25fdHJlZVwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFNlc3Npb25UcmVlRXZlbnQ+KTogdm9pZDtcblx0b24oZXZlbnQ6IFwiY29udGV4dFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPENvbnRleHRFdmVudCwgQ29udGV4dEV2ZW50UmVzdWx0Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcImJlZm9yZV9hZ2VudF9zdGFydFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPEJlZm9yZUFnZW50U3RhcnRFdmVudCwgQmVmb3JlQWdlbnRTdGFydEV2ZW50UmVzdWx0Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcImFnZW50X3N0YXJ0XCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8QWdlbnRTdGFydEV2ZW50Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcImFnZW50X2VuZFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPEFnZW50RW5kRXZlbnQ+KTogdm9pZDtcblx0b24oZXZlbnQ6IFwidHVybl9zdGFydFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFR1cm5TdGFydEV2ZW50Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInR1cm5fZW5kXCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8VHVybkVuZEV2ZW50Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcIm1lc3NhZ2Vfc3RhcnRcIiwgaGFuZGxlcjogRXh0ZW5zaW9uSGFuZGxlcjxNZXNzYWdlU3RhcnRFdmVudD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJtZXNzYWdlX3VwZGF0ZVwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPE1lc3NhZ2VVcGRhdGVFdmVudD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJtZXNzYWdlX2VuZFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPE1lc3NhZ2VFbmRFdmVudD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJ0b29sX2V4ZWN1dGlvbl9zdGFydFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFRvb2xFeGVjdXRpb25TdGFydEV2ZW50Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInRvb2xfZXhlY3V0aW9uX3VwZGF0ZVwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPFRvb2xFeGVjdXRpb25VcGRhdGVFdmVudD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJ0b29sX2V4ZWN1dGlvbl9lbmRcIiwgaGFuZGxlcjogRXh0ZW5zaW9uSGFuZGxlcjxUb29sRXhlY3V0aW9uRW5kRXZlbnQ+KTogdm9pZDtcblx0b24oZXZlbnQ6IFwibW9kZWxfc2VsZWN0XCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8TW9kZWxTZWxlY3RFdmVudD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJ0b29sX2NhbGxcIiwgaGFuZGxlcjogRXh0ZW5zaW9uSGFuZGxlcjxUb29sQ2FsbEV2ZW50LCBUb29sQ2FsbEV2ZW50UmVzdWx0Pik6IHZvaWQ7XG5cdG9uKGV2ZW50OiBcInRvb2xfcmVzdWx0XCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8VG9vbFJlc3VsdEV2ZW50LCBUb29sUmVzdWx0RXZlbnRSZXN1bHQ+KTogdm9pZDtcblx0b24oZXZlbnQ6IFwidXNlcl9iYXNoXCIsIGhhbmRsZXI6IEV4dGVuc2lvbkhhbmRsZXI8VXNlckJhc2hFdmVudCwgVXNlckJhc2hFdmVudFJlc3VsdD4pOiB2b2lkO1xuXHRvbihldmVudDogXCJpbnB1dFwiLCBoYW5kbGVyOiBFeHRlbnNpb25IYW5kbGVyPElucHV0RXZlbnQsIElucHV0RXZlbnRSZXN1bHQ+KTogdm9pZDtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIFRvb2wgUmVnaXN0cmF0aW9uXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXHQvKiogUmVnaXN0ZXIgYSB0b29sIHRoYXQgdGhlIExMTSBjYW4gY2FsbC4gKi9cblx0cmVnaXN0ZXJUb29sPFRQYXJhbXMgZXh0ZW5kcyBUU2NoZW1hID0gVFNjaGVtYSwgVERldGFpbHMgPSB1bmtub3duPih0b29sOiBUb29sRGVmaW5pdGlvbjxUUGFyYW1zLCBURGV0YWlscz4pOiB2b2lkO1xuXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gQ29tbWFuZCwgU2hvcnRjdXQsIEZsYWcgUmVnaXN0cmF0aW9uXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXHQvKiogUmVnaXN0ZXIgYSBjdXN0b20gY29tbWFuZC4gKi9cblx0cmVnaXN0ZXJDb21tYW5kKG5hbWU6IHN0cmluZywgb3B0aW9uczogT21pdDxSZWdpc3RlcmVkQ29tbWFuZCwgXCJuYW1lXCI+KTogdm9pZDtcblxuXHQvKiogUmVnaXN0ZXIgYSBrZXlib2FyZCBzaG9ydGN1dC4gKi9cblx0cmVnaXN0ZXJTaG9ydGN1dChcblx0XHRzaG9ydGN1dDogS2V5SWQsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdFx0XHRoYW5kbGVyOiAoY3R4OiBFeHRlbnNpb25Db250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblx0XHR9LFxuXHQpOiB2b2lkO1xuXG5cdC8qKiBSZWdpc3RlciBhIENMSSBmbGFnLiAqL1xuXHRyZWdpc3RlckZsYWcoXG5cdFx0bmFtZTogc3RyaW5nLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRcdFx0dHlwZTogXCJib29sZWFuXCIgfCBcInN0cmluZ1wiO1xuXHRcdFx0ZGVmYXVsdD86IGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0fSxcblx0KTogdm9pZDtcblxuXHQvKiogR2V0IHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyZWQgQ0xJIGZsYWcuICovXG5cdGdldEZsYWcobmFtZTogc3RyaW5nKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIE1lc3NhZ2UgUmVuZGVyaW5nXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXHQvKiogUmVnaXN0ZXIgYSBjdXN0b20gcmVuZGVyZXIgZm9yIEN1c3RvbU1lc3NhZ2VFbnRyeS4gKi9cblx0cmVnaXN0ZXJNZXNzYWdlUmVuZGVyZXI8VCA9IHVua25vd24+KGN1c3RvbVR5cGU6IHN0cmluZywgcmVuZGVyZXI6IE1lc3NhZ2VSZW5kZXJlcjxUPik6IHZvaWQ7XG5cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHQvLyBBY3Rpb25zXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXHQvKiogU2VuZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBzZXNzaW9uLiAqL1xuXHRzZW5kTWVzc2FnZTxUID0gdW5rbm93bj4oXG5cdFx0bWVzc2FnZTogUGljazxDdXN0b21NZXNzYWdlPFQ+LCBcImN1c3RvbVR5cGVcIiB8IFwiY29udGVudFwiIHwgXCJkaXNwbGF5XCIgfCBcImRldGFpbHNcIj4sXG5cdFx0b3B0aW9ucz86IHsgdHJpZ2dlclR1cm4/OiBib29sZWFuOyBkZWxpdmVyQXM/OiBcInN0ZWVyXCIgfCBcImZvbGxvd1VwXCIgfCBcIm5leHRUdXJuXCIgfSxcblx0KTogdm9pZDtcblxuXHQvKipcblx0ICogU2VuZCBhIHVzZXIgbWVzc2FnZSB0byB0aGUgYWdlbnQuIEFsd2F5cyB0cmlnZ2VycyBhIHR1cm4uXG5cdCAqIFdoZW4gdGhlIGFnZW50IGlzIHN0cmVhbWluZywgdXNlIGRlbGl2ZXJBcyB0byBzcGVjaWZ5IGhvdyB0byBxdWV1ZSB0aGUgbWVzc2FnZS5cblx0ICovXG5cdHNlbmRVc2VyTWVzc2FnZShcblx0XHRjb250ZW50OiBzdHJpbmcgfCAoVGV4dENvbnRlbnQgfCBJbWFnZUNvbnRlbnQpW10sXG5cdFx0b3B0aW9ucz86IHsgZGVsaXZlckFzPzogXCJzdGVlclwiIHwgXCJmb2xsb3dVcFwiIH0sXG5cdCk6IHZvaWQ7XG5cblx0LyoqIEFwcGVuZCBhIGN1c3RvbSBlbnRyeSB0byB0aGUgc2Vzc2lvbiBmb3Igc3RhdGUgcGVyc2lzdGVuY2UgKG5vdCBzZW50IHRvIExMTSkuICovXG5cdGFwcGVuZEVudHJ5PFQgPSB1bmtub3duPihjdXN0b21UeXBlOiBzdHJpbmcsIGRhdGE/OiBUKTogdm9pZDtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIFNlc3Npb24gTWV0YWRhdGFcblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cdC8qKiBTZXQgdGhlIHNlc3Npb24gZGlzcGxheSBuYW1lIChzaG93biBpbiBzZXNzaW9uIHNlbGVjdG9yKS4gKi9cblx0c2V0U2Vzc2lvbk5hbWUobmFtZTogc3RyaW5nKTogdm9pZDtcblxuXHQvKiogR2V0IHRoZSBjdXJyZW50IHNlc3Npb24gbmFtZSwgaWYgc2V0LiAqL1xuXHRnZXRTZXNzaW9uTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqIFNldCBvciBjbGVhciBhIGxhYmVsIG9uIGFuIGVudHJ5LiBMYWJlbHMgYXJlIHVzZXItZGVmaW5lZCBtYXJrZXJzIGZvciBib29rbWFya2luZy9uYXZpZ2F0aW9uLiAqL1xuXHRzZXRMYWJlbChlbnRyeUlkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkO1xuXG5cdC8qKiBFeGVjdXRlIGEgc2hlbGwgY29tbWFuZC4gKi9cblx0ZXhlYyhjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogRXhlY09wdGlvbnMpOiBQcm9taXNlPEV4ZWNSZXN1bHQ+O1xuXG5cdC8qKiBHZXQgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGFjdGl2ZSB0b29sIG5hbWVzLiAqL1xuXHRnZXRBY3RpdmVUb29scygpOiBzdHJpbmdbXTtcblxuXHQvKiogR2V0IGFsbCBjb25maWd1cmVkIHRvb2xzIHdpdGggbmFtZSBhbmQgZGVzY3JpcHRpb24uICovXG5cdGdldEFsbFRvb2xzKCk6IFRvb2xJbmZvW107XG5cblx0LyoqIFNldCB0aGUgYWN0aXZlIHRvb2xzIGJ5IG5hbWUuICovXG5cdHNldEFjdGl2ZVRvb2xzKHRvb2xOYW1lczogc3RyaW5nW10pOiB2b2lkO1xuXG5cdC8qKiBHZXQgYXZhaWxhYmxlIHNsYXNoIGNvbW1hbmRzIGluIHRoZSBjdXJyZW50IHNlc3Npb24uICovXG5cdGdldENvbW1hbmRzKCk6IFNsYXNoQ29tbWFuZEluZm9bXTtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIE1vZGVsIGFuZCBUaGlua2luZyBMZXZlbFxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblx0LyoqIFNldCB0aGUgY3VycmVudCBtb2RlbC4gUmV0dXJucyBmYWxzZSBpZiBubyBBUEkga2V5IGF2YWlsYWJsZS4gKi9cblx0c2V0TW9kZWwobW9kZWw6IE1vZGVsPGFueT4pOiBQcm9taXNlPGJvb2xlYW4+O1xuXG5cdC8qKiBHZXQgY3VycmVudCB0aGlua2luZyBsZXZlbC4gKi9cblx0Z2V0VGhpbmtpbmdMZXZlbCgpOiBUaGlua2luZ0xldmVsO1xuXG5cdC8qKiBTZXQgdGhpbmtpbmcgbGV2ZWwgKGNsYW1wZWQgdG8gbW9kZWwgY2FwYWJpbGl0aWVzKS4gKi9cblx0c2V0VGhpbmtpbmdMZXZlbChsZXZlbDogVGhpbmtpbmdMZXZlbCk6IHZvaWQ7XG5cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHQvLyBQcm92aWRlciBSZWdpc3RyYXRpb25cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBvciBvdmVycmlkZSBhIG1vZGVsIHByb3ZpZGVyLlxuXHQgKlxuXHQgKiBJZiBgbW9kZWxzYCBpcyBwcm92aWRlZDogcmVwbGFjZXMgYWxsIGV4aXN0aW5nIG1vZGVscyBmb3IgdGhpcyBwcm92aWRlci5cblx0ICogSWYgb25seSBgYmFzZVVybGAgaXMgcHJvdmlkZWQ6IG92ZXJyaWRlcyB0aGUgVVJMIGZvciBleGlzdGluZyBtb2RlbHMuXG5cdCAqIElmIGBvYXV0aGAgaXMgcHJvdmlkZWQ6IHJlZ2lzdGVycyBPQXV0aCBwcm92aWRlciBmb3IgL2xvZ2luIHN1cHBvcnQuXG5cdCAqIElmIGBzdHJlYW1TaW1wbGVgIGlzIHByb3ZpZGVkOiByZWdpc3RlcnMgYSBjdXN0b20gQVBJIHN0cmVhbSBoYW5kbGVyLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvLyBSZWdpc3RlciBhIG5ldyBwcm92aWRlciB3aXRoIGN1c3RvbSBtb2RlbHNcblx0ICogcGkucmVnaXN0ZXJQcm92aWRlcihcIm15LXByb3h5XCIsIHtcblx0ICogICBiYXNlVXJsOiBcImh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb21cIixcblx0ICogICBhcGlLZXk6IFwiUFJPWFlfQVBJX0tFWVwiLFxuXHQgKiAgIGFwaTogXCJhbnRocm9waWMtbWVzc2FnZXNcIixcblx0ICogICBtb2RlbHM6IFtcblx0ICogICAgIHtcblx0ICogICAgICAgaWQ6IFwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0XCIsXG5cdCAqICAgICAgIG5hbWU6IFwiQ2xhdWRlIDQgU29ubmV0IChwcm94eSlcIixcblx0ICogICAgICAgcmVhc29uaW5nOiBmYWxzZSxcblx0ICogICAgICAgaW5wdXQ6IFtcInRleHRcIiwgXCJpbWFnZVwiXSxcblx0ICogICAgICAgY29zdDogeyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfSxcblx0ICogICAgICAgY29udGV4dFdpbmRvdzogMjAwMDAwLFxuXHQgKiAgICAgICBtYXhUb2tlbnM6IDE2Mzg0XG5cdCAqICAgICB9XG5cdCAqICAgXVxuXHQgKiB9KTtcblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogLy8gT3ZlcnJpZGUgYmFzZVVybCBmb3IgYW4gZXhpc3RpbmcgcHJvdmlkZXJcblx0ICogcGkucmVnaXN0ZXJQcm92aWRlcihcImFudGhyb3BpY1wiLCB7XG5cdCAqICAgYmFzZVVybDogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tXCJcblx0ICogfSk7XG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIC8vIFJlZ2lzdGVyIHByb3ZpZGVyIHdpdGggT0F1dGggc3VwcG9ydFxuXHQgKiBwaS5yZWdpc3RlclByb3ZpZGVyKFwiY29ycG9yYXRlLWFpXCIsIHtcblx0ICogICBiYXNlVXJsOiBcImh0dHBzOi8vYWkuY29ycC5jb21cIixcblx0ICogICBhcGk6IFwib3BlbmFpLXJlc3BvbnNlc1wiLFxuXHQgKiAgIG1vZGVsczogWy4uLl0sXG5cdCAqICAgb2F1dGg6IHtcblx0ICogICAgIG5hbWU6IFwiQ29ycG9yYXRlIEFJIChTU08pXCIsXG5cdCAqICAgICBhc3luYyBsb2dpbihjYWxsYmFja3MpIHsgLi4uIH0sXG5cdCAqICAgICBhc3luYyByZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpIHsgLi4uIH0sXG5cdCAqICAgICBnZXRBcGlLZXkoY3JlZGVudGlhbHMpIHsgcmV0dXJuIGNyZWRlbnRpYWxzLmFjY2VzczsgfVxuXHQgKiAgIH1cblx0ICogfSk7XG5cdCAqL1xuXHRyZWdpc3RlclByb3ZpZGVyKG5hbWU6IHN0cmluZywgY29uZmlnOiBQcm92aWRlckNvbmZpZyk6IHZvaWQ7XG5cblx0LyoqIFNoYXJlZCBldmVudCBidXMgZm9yIGV4dGVuc2lvbiBjb21tdW5pY2F0aW9uLiAqL1xuXHRldmVudHM6IEV2ZW50QnVzO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQcm92aWRlciBSZWdpc3RyYXRpb24gVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHJlZ2lzdGVyaW5nIGEgcHJvdmlkZXIgdmlhIHBpLnJlZ2lzdGVyUHJvdmlkZXIoKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJDb25maWcge1xuXHQvKiogQmFzZSBVUkwgZm9yIHRoZSBBUEkgZW5kcG9pbnQuIFJlcXVpcmVkIHdoZW4gZGVmaW5pbmcgbW9kZWxzLiAqL1xuXHRiYXNlVXJsPzogc3RyaW5nO1xuXHQvKiogQVBJIGtleSBvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lLiBSZXF1aXJlZCB3aGVuIGRlZmluaW5nIG1vZGVscyAodW5sZXNzIG9hdXRoIHByb3ZpZGVkKS4gKi9cblx0YXBpS2V5Pzogc3RyaW5nO1xuXHQvKiogQVBJIHR5cGUuIFJlcXVpcmVkIGF0IHByb3ZpZGVyIG9yIG1vZGVsIGxldmVsIHdoZW4gZGVmaW5pbmcgbW9kZWxzLiAqL1xuXHRhcGk/OiBBcGk7XG5cdC8qKiBPcHRpb25hbCBzdHJlYW1TaW1wbGUgaGFuZGxlciBmb3IgY3VzdG9tIEFQSXMuICovXG5cdHN0cmVhbVNpbXBsZT86IChtb2RlbDogTW9kZWw8QXBpPiwgY29udGV4dDogQ29udGV4dCwgb3B0aW9ucz86IFNpbXBsZVN0cmVhbU9wdGlvbnMpID0+IEFzc2lzdGFudE1lc3NhZ2VFdmVudFN0cmVhbTtcblx0LyoqIEN1c3RvbSBoZWFkZXJzIHRvIGluY2x1ZGUgaW4gcmVxdWVzdHMuICovXG5cdGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHQvKiogSWYgdHJ1ZSwgYWRkcyBBdXRob3JpemF0aW9uOiBCZWFyZXIgaGVhZGVyIHdpdGggdGhlIHJlc29sdmVkIEFQSSBrZXkuICovXG5cdGF1dGhIZWFkZXI/OiBib29sZWFuO1xuXHQvKiogTW9kZWxzIHRvIHJlZ2lzdGVyLiBJZiBwcm92aWRlZCwgcmVwbGFjZXMgYWxsIGV4aXN0aW5nIG1vZGVscyBmb3IgdGhpcyBwcm92aWRlci4gKi9cblx0bW9kZWxzPzogUHJvdmlkZXJNb2RlbENvbmZpZ1tdO1xuXHQvKiogT0F1dGggcHJvdmlkZXIgZm9yIC9sb2dpbiBzdXBwb3J0LiBUaGUgYGlkYCBpcyBzZXQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBwcm92aWRlciBuYW1lLiAqL1xuXHRvYXV0aD86IHtcblx0XHQvKiogRGlzcGxheSBuYW1lIGZvciB0aGUgcHJvdmlkZXIgaW4gbG9naW4gVUkuICovXG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdC8qKiBSdW4gdGhlIGxvZ2luIGZsb3csIHJldHVybiBjcmVkZW50aWFscyB0byBwZXJzaXN0LiAqL1xuXHRcdGxvZ2luKGNhbGxiYWNrczogT0F1dGhMb2dpbkNhbGxiYWNrcyk6IFByb21pc2U8T0F1dGhDcmVkZW50aWFscz47XG5cdFx0LyoqIFJlZnJlc2ggZXhwaXJlZCBjcmVkZW50aWFscywgcmV0dXJuIHVwZGF0ZWQgY3JlZGVudGlhbHMgdG8gcGVyc2lzdC4gKi9cblx0XHRyZWZyZXNoVG9rZW4oY3JlZGVudGlhbHM6IE9BdXRoQ3JlZGVudGlhbHMpOiBQcm9taXNlPE9BdXRoQ3JlZGVudGlhbHM+O1xuXHRcdC8qKiBDb252ZXJ0IGNyZWRlbnRpYWxzIHRvIEFQSSBrZXkgc3RyaW5nIGZvciB0aGUgcHJvdmlkZXIuICovXG5cdFx0Z2V0QXBpS2V5KGNyZWRlbnRpYWxzOiBPQXV0aENyZWRlbnRpYWxzKTogc3RyaW5nO1xuXHRcdC8qKiBPcHRpb25hbDogbW9kaWZ5IG1vZGVscyBmb3IgdGhpcyBwcm92aWRlciAoZS5nLiwgdXBkYXRlIGJhc2VVcmwgYmFzZWQgb24gY3JlZGVudGlhbHMpLiAqL1xuXHRcdG1vZGlmeU1vZGVscz8obW9kZWxzOiBNb2RlbDxBcGk+W10sIGNyZWRlbnRpYWxzOiBPQXV0aENyZWRlbnRpYWxzKTogTW9kZWw8QXBpPltdO1xuXHR9O1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBmb3IgYSBtb2RlbCB3aXRoaW4gYSBwcm92aWRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJNb2RlbENvbmZpZyB7XG5cdC8qKiBNb2RlbCBJRCAoZS5nLiwgXCJjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRcIikuICovXG5cdGlkOiBzdHJpbmc7XG5cdC8qKiBEaXNwbGF5IG5hbWUgKGUuZy4sIFwiQ2xhdWRlIDQgU29ubmV0XCIpLiAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBBUEkgdHlwZSBvdmVycmlkZSBmb3IgdGhpcyBtb2RlbC4gKi9cblx0YXBpPzogQXBpO1xuXHQvKiogV2hldGhlciB0aGUgbW9kZWwgc3VwcG9ydHMgZXh0ZW5kZWQgdGhpbmtpbmcuICovXG5cdHJlYXNvbmluZzogYm9vbGVhbjtcblx0LyoqIFN1cHBvcnRlZCBpbnB1dCB0eXBlcy4gKi9cblx0aW5wdXQ6IChcInRleHRcIiB8IFwiaW1hZ2VcIilbXTtcblx0LyoqIENvc3QgcGVyIHRva2VuIChmb3IgdHJhY2tpbmcsIGNhbiBiZSAwKS4gKi9cblx0Y29zdDogeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlcjsgY2FjaGVSZWFkOiBudW1iZXI7IGNhY2hlV3JpdGU6IG51bWJlciB9O1xuXHQvKiogTWF4aW11bSBjb250ZXh0IHdpbmRvdyBzaXplIGluIHRva2Vucy4gKi9cblx0Y29udGV4dFdpbmRvdzogbnVtYmVyO1xuXHQvKiogTWF4aW11bSBvdXRwdXQgdG9rZW5zLiAqL1xuXHRtYXhUb2tlbnM6IG51bWJlcjtcblx0LyoqIEN1c3RvbSBoZWFkZXJzIGZvciB0aGlzIG1vZGVsLiAqL1xuXHRoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqIE9wZW5BSSBjb21wYXRpYmlsaXR5IHNldHRpbmdzLiAqL1xuXHRjb21wYXQ/OiBNb2RlbDxBcGk+W1wiY29tcGF0XCJdO1xufVxuXG4vKiogRXh0ZW5zaW9uIGZhY3RvcnkgZnVuY3Rpb24gdHlwZS4gU3VwcG9ydHMgYm90aCBzeW5jIGFuZCBhc3luYyBpbml0aWFsaXphdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbkZhY3RvcnkgPSAocGk6IEV4dGVuc2lvbkFQSSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRlZCBFeHRlbnNpb24gVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlcmVkVG9vbCB7XG5cdGRlZmluaXRpb246IFRvb2xEZWZpbml0aW9uO1xuXHRleHRlbnNpb25QYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uRmxhZyB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdHR5cGU6IFwiYm9vbGVhblwiIHwgXCJzdHJpbmdcIjtcblx0ZGVmYXVsdD86IGJvb2xlYW4gfCBzdHJpbmc7XG5cdGV4dGVuc2lvblBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25TaG9ydGN1dCB7XG5cdHNob3J0Y3V0OiBLZXlJZDtcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGhhbmRsZXI6IChjdHg6IEV4dGVuc2lvbkNvbnRleHQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXHRleHRlbnNpb25QYXRoOiBzdHJpbmc7XG59XG5cbnR5cGUgSGFuZGxlckZuID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2VIYW5kbGVyID0gPFQgPSB1bmtub3duPihcblx0bWVzc2FnZTogUGljazxDdXN0b21NZXNzYWdlPFQ+LCBcImN1c3RvbVR5cGVcIiB8IFwiY29udGVudFwiIHwgXCJkaXNwbGF5XCIgfCBcImRldGFpbHNcIj4sXG5cdG9wdGlvbnM/OiB7IHRyaWdnZXJUdXJuPzogYm9vbGVhbjsgZGVsaXZlckFzPzogXCJzdGVlclwiIHwgXCJmb2xsb3dVcFwiIHwgXCJuZXh0VHVyblwiIH0sXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFNlbmRVc2VyTWVzc2FnZUhhbmRsZXIgPSAoXG5cdGNvbnRlbnQ6IHN0cmluZyB8IChUZXh0Q29udGVudCB8IEltYWdlQ29udGVudClbXSxcblx0b3B0aW9ucz86IHsgZGVsaXZlckFzPzogXCJzdGVlclwiIHwgXCJmb2xsb3dVcFwiIH0sXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIEFwcGVuZEVudHJ5SGFuZGxlciA9IDxUID0gdW5rbm93bj4oY3VzdG9tVHlwZTogc3RyaW5nLCBkYXRhPzogVCkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgU2V0U2Vzc2lvbk5hbWVIYW5kbGVyID0gKG5hbWU6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgR2V0U2Vzc2lvbk5hbWVIYW5kbGVyID0gKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBHZXRBY3RpdmVUb29sc0hhbmRsZXIgPSAoKSA9PiBzdHJpbmdbXTtcblxuLyoqIFRvb2wgaW5mbyB3aXRoIG5hbWUsIGRlc2NyaXB0aW9uLCBhbmQgcGFyYW1ldGVyIHNjaGVtYSAqL1xuZXhwb3J0IHR5cGUgVG9vbEluZm8gPSBQaWNrPFRvb2xEZWZpbml0aW9uLCBcIm5hbWVcIiB8IFwiZGVzY3JpcHRpb25cIiB8IFwicGFyYW1ldGVyc1wiPjtcblxuZXhwb3J0IHR5cGUgR2V0QWxsVG9vbHNIYW5kbGVyID0gKCkgPT4gVG9vbEluZm9bXTtcblxuZXhwb3J0IHR5cGUgR2V0Q29tbWFuZHNIYW5kbGVyID0gKCkgPT4gU2xhc2hDb21tYW5kSW5mb1tdO1xuXG5leHBvcnQgdHlwZSBTZXRBY3RpdmVUb29sc0hhbmRsZXIgPSAodG9vbE5hbWVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgU2V0TW9kZWxIYW5kbGVyID0gKG1vZGVsOiBNb2RlbDxhbnk+KSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG5leHBvcnQgdHlwZSBHZXRUaGlua2luZ0xldmVsSGFuZGxlciA9ICgpID0+IFRoaW5raW5nTGV2ZWw7XG5cbmV4cG9ydCB0eXBlIFNldFRoaW5raW5nTGV2ZWxIYW5kbGVyID0gKGxldmVsOiBUaGlua2luZ0xldmVsKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBTZXRMYWJlbEhhbmRsZXIgPSAoZW50cnlJZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG4vKipcbiAqIFNoYXJlZCBzdGF0ZSBjcmVhdGVkIGJ5IGxvYWRlciwgdXNlZCBkdXJpbmcgcmVnaXN0cmF0aW9uIGFuZCBydW50aW1lLlxuICogQ29udGFpbnMgZmxhZyB2YWx1ZXMgKGRlZmF1bHRzIHNldCBkdXJpbmcgcmVnaXN0cmF0aW9uLCBDTEkgdmFsdWVzIHNldCBhZnRlcikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uUnVudGltZVN0YXRlIHtcblx0ZmxhZ1ZhbHVlczogTWFwPHN0cmluZywgYm9vbGVhbiB8IHN0cmluZz47XG5cdC8qKiBQcm92aWRlciByZWdpc3RyYXRpb25zIHF1ZXVlZCBkdXJpbmcgZXh0ZW5zaW9uIGxvYWRpbmcsIHByb2Nlc3NlZCB3aGVuIHJ1bm5lciBiaW5kcyAqL1xuXHRwZW5kaW5nUHJvdmlkZXJSZWdpc3RyYXRpb25zOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29uZmlnOiBQcm92aWRlckNvbmZpZyB9Pjtcbn1cblxuLyoqXG4gKiBBY3Rpb24gaW1wbGVtZW50YXRpb25zIGZvciBwaS4qIEFQSSBtZXRob2RzLlxuICogUHJvdmlkZWQgdG8gcnVubmVyLmluaXRpYWxpemUoKSwgY29waWVkIGludG8gdGhlIHNoYXJlZCBydW50aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbkFjdGlvbnMge1xuXHRzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2VIYW5kbGVyO1xuXHRzZW5kVXNlck1lc3NhZ2U6IFNlbmRVc2VyTWVzc2FnZUhhbmRsZXI7XG5cdGFwcGVuZEVudHJ5OiBBcHBlbmRFbnRyeUhhbmRsZXI7XG5cdHNldFNlc3Npb25OYW1lOiBTZXRTZXNzaW9uTmFtZUhhbmRsZXI7XG5cdGdldFNlc3Npb25OYW1lOiBHZXRTZXNzaW9uTmFtZUhhbmRsZXI7XG5cdHNldExhYmVsOiBTZXRMYWJlbEhhbmRsZXI7XG5cdGdldEFjdGl2ZVRvb2xzOiBHZXRBY3RpdmVUb29sc0hhbmRsZXI7XG5cdGdldEFsbFRvb2xzOiBHZXRBbGxUb29sc0hhbmRsZXI7XG5cdHNldEFjdGl2ZVRvb2xzOiBTZXRBY3RpdmVUb29sc0hhbmRsZXI7XG5cdGdldENvbW1hbmRzOiBHZXRDb21tYW5kc0hhbmRsZXI7XG5cdHNldE1vZGVsOiBTZXRNb2RlbEhhbmRsZXI7XG5cdGdldFRoaW5raW5nTGV2ZWw6IEdldFRoaW5raW5nTGV2ZWxIYW5kbGVyO1xuXHRzZXRUaGlua2luZ0xldmVsOiBTZXRUaGlua2luZ0xldmVsSGFuZGxlcjtcbn1cblxuLyoqXG4gKiBBY3Rpb25zIGZvciBFeHRlbnNpb25Db250ZXh0IChjdHguKiBpbiBldmVudCBoYW5kbGVycykuXG4gKiBSZXF1aXJlZCBieSBhbGwgbW9kZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uQ29udGV4dEFjdGlvbnMge1xuXHRnZXRNb2RlbDogKCkgPT4gTW9kZWw8YW55PiB8IHVuZGVmaW5lZDtcblx0aXNJZGxlOiAoKSA9PiBib29sZWFuO1xuXHRhYm9ydDogKCkgPT4gdm9pZDtcblx0aGFzUGVuZGluZ01lc3NhZ2VzOiAoKSA9PiBib29sZWFuO1xuXHRzaHV0ZG93bjogKCkgPT4gdm9pZDtcblx0Z2V0Q29udGV4dFVzYWdlOiAoKSA9PiBDb250ZXh0VXNhZ2UgfCB1bmRlZmluZWQ7XG5cdGNvbXBhY3Q6IChvcHRpb25zPzogQ29tcGFjdE9wdGlvbnMpID0+IHZvaWQ7XG5cdGdldFN5c3RlbVByb21wdDogKCkgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIEFjdGlvbnMgZm9yIEV4dGVuc2lvbkNvbW1hbmRDb250ZXh0IChjdHguKiBpbiBjb21tYW5kIGhhbmRsZXJzKS5cbiAqIE9ubHkgbmVlZGVkIGZvciBpbnRlcmFjdGl2ZSBtb2RlIHdoZXJlIGV4dGVuc2lvbiBjb21tYW5kcyBhcmUgaW52b2thYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbkNvbW1hbmRDb250ZXh0QWN0aW9ucyB7XG5cdHdhaXRGb3JJZGxlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRuZXdTZXNzaW9uOiAob3B0aW9ucz86IHtcblx0XHRwYXJlbnRTZXNzaW9uPzogc3RyaW5nO1xuXHRcdHNldHVwPzogKHNlc3Npb25NYW5hZ2VyOiBTZXNzaW9uTWFuYWdlcikgPT4gUHJvbWlzZTx2b2lkPjtcblx0fSkgPT4gUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9Pjtcblx0Zm9yazogKGVudHJ5SWQ6IHN0cmluZykgPT4gUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9Pjtcblx0bmF2aWdhdGVUcmVlOiAoXG5cdFx0dGFyZ2V0SWQ6IHN0cmluZyxcblx0XHRvcHRpb25zPzogeyBzdW1tYXJpemU/OiBib29sZWFuOyBjdXN0b21JbnN0cnVjdGlvbnM/OiBzdHJpbmc7IHJlcGxhY2VJbnN0cnVjdGlvbnM/OiBib29sZWFuOyBsYWJlbD86IHN0cmluZyB9LFxuXHQpID0+IFByb21pc2U8eyBjYW5jZWxsZWQ6IGJvb2xlYW4gfT47XG5cdHN3aXRjaFNlc3Npb246IChzZXNzaW9uUGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+O1xuXHRyZWxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogRnVsbCBydW50aW1lID0gc3RhdGUgKyBhY3Rpb25zLlxuICogQ3JlYXRlZCBieSBsb2FkZXIgd2l0aCB0aHJvd2luZyBhY3Rpb24gc3R1YnMsIGNvbXBsZXRlZCBieSBydW5uZXIuaW5pdGlhbGl6ZSgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblJ1bnRpbWUgZXh0ZW5kcyBFeHRlbnNpb25SdW50aW1lU3RhdGUsIEV4dGVuc2lvbkFjdGlvbnMge31cblxuLyoqIExvYWRlZCBleHRlbnNpb24gd2l0aCBhbGwgcmVnaXN0ZXJlZCBpdGVtcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uIHtcblx0cGF0aDogc3RyaW5nO1xuXHRyZXNvbHZlZFBhdGg6IHN0cmluZztcblx0aGFuZGxlcnM6IE1hcDxzdHJpbmcsIEhhbmRsZXJGbltdPjtcblx0dG9vbHM6IE1hcDxzdHJpbmcsIFJlZ2lzdGVyZWRUb29sPjtcblx0bWVzc2FnZVJlbmRlcmVyczogTWFwPHN0cmluZywgTWVzc2FnZVJlbmRlcmVyPjtcblx0Y29tbWFuZHM6IE1hcDxzdHJpbmcsIFJlZ2lzdGVyZWRDb21tYW5kPjtcblx0ZmxhZ3M6IE1hcDxzdHJpbmcsIEV4dGVuc2lvbkZsYWc+O1xuXHRzaG9ydGN1dHM6IE1hcDxLZXlJZCwgRXh0ZW5zaW9uU2hvcnRjdXQ+O1xufVxuXG4vKiogUmVzdWx0IG9mIGxvYWRpbmcgZXh0ZW5zaW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEV4dGVuc2lvbnNSZXN1bHQge1xuXHRleHRlbnNpb25zOiBFeHRlbnNpb25bXTtcblx0ZXJyb3JzOiBBcnJheTx7IHBhdGg6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9Pjtcblx0LyoqIFNoYXJlZCBydW50aW1lIC0gYWN0aW9ucyBhcmUgdGhyb3dpbmcgc3R1YnMgdW50aWwgcnVubmVyLmluaXRpYWxpemUoKSAqL1xuXHRydW50aW1lOiBFeHRlbnNpb25SdW50aW1lO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFeHRlbnNpb24gRXJyb3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25FcnJvciB7XG5cdGV4dGVuc2lvblBhdGg6IHN0cmluZztcblx0ZXZlbnQ6IHN0cmluZztcblx0ZXJyb3I6IHN0cmluZztcblx0c3RhY2s/OiBzdHJpbmc7XG59XG5cbmBgYFxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvZXh0ZW5zaW9ucy90eXBlcy50cyIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJmaWxlIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDczMjU5MTEsImVuZGVkQXQiOjE3NzEzNDczMjYxMTUsImR1cmF0aW9uTXMiOjIwNH19fX0sImVuZGVkQXQiOjE3NzEzNDczMjYxMTUsImR1cmF0aW9uTXMiOjIwM30seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMUVwVDhYeHNzWDV2YWliNmZvZlFEZUciLCJ0b29sTmFtZSI6Imxpbmt1cF93ZWJfc2VhcmNoIiwiYXJncyI6eyJxdWVyeSI6ImJhZGxvZ2ljL3BpLW1vbm8gcmVnaXN0ZXJQcm92aWRlciBzaW1wbGUgb3ZlcmxvYWQgYmFzZVVybCBhcGlLZXkifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzMyODkwMiwicGFydGlhbFJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTZWFyY2hpbmcuLi4ifV0sImRldGFpbHMiOnt9fSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkZvdW5kIDIwIHJlc3VsdChzKTpcblxuIyMgcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9leHRlbnNpb25zLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvZXh0ZW5zaW9ucy5tZFxuXG4vLyBSZWdpc3RlciBhIG5ldyBwcm92aWRlciB3aXRoIGN1c3RvbSBtb2RlbHMgcGkucmVnaXN0ZXJQcm92aWRlcigmcXVvdDtteS1wcm94eSZxdW90OywgeyBiYXNlVXJsOiAmcXVvdDtodHRwczovL3Byb3h5LmV4YW1wbGUuY29tJnF1b3Q7LCBhcGlLZXk6ICZxdW90O1BST1hZX0FQSV9LRVkmcXVvdDssIC8vIGVudiB2YXIgbmFtZSBvciBsaXRlcmFsIGFwaTogJnF1b3Q7YW50aHJvcGljLW1lc3NhZ2VzJnF1b3Q7LCBtb2RlbHM6IFsgeyBpZDogJnF1b3Q7Y2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0JnF1b3Q7LCBuYW1lOiAmcXVvdDtDbGF1ZGUgNCBTb25uZXQgKHByb3h5KSZxdW90OywgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFsmcXVvdDt0ZXh0JnF1b3Q7LCAmcXVvdDtpbWFnZSZxdW90O10sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDIwMDAwMCwgbWF4VG9rZW5zOiAxNjM4NCB9IF0gfSk7IC8vIE92ZXJyaWRlIGJhc2VVcmwgZm9yIGFuIGV4aXN0aW5nIHByb3ZpZGVyIChrZWVwcyBhbGwgbW9kZWxzKSBwaS5yZWdpc3RlclByb3ZpZGVyKCZxdW90O2FudGhyb3BpYyZxdW90OywgeyBiYXNlVXJsOiAmcXVvdDtodHRwczovL3Byb3h5LmV4YW1wbGUuY29tJnF1b3Q7IH0pOyAvLyBSZWdpc3RlciBwcm92aWRlciB3aXRoIE9BdXRoIHN1XG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9leHRlbnNpb25zLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuLy8gUmVnaXN0ZXIgYSBuZXcgcHJvdmlkZXIgd2l0aCBjdXN0b20gbW9kZWxzIHBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJteS1wcm94eVwiLCB7IGJhc2VVcmw6IFwiaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbVwiLCBhcGlLZXk6IFwiUFJPWFlfQVBJX0tFWVwiLCAvLyBlbnYgdmFyIG5hbWUgb3IgbGl0ZXJhbCBhcGk6IFwiYW50aHJvcGljLW1lc3NhZ2VzXCIsIG1vZGVsczogWyB7IGlkOiBcImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNFwiLCBuYW1lOiBcIkNsYXVkZSA0IFNvbm5ldCAocHJveHkpXCIsIHJlYXNvbmluZzogZmFsc2UsIGlucHV0OiBbXCJ0ZXh0XCIsIFwiaW1hZ2VcIl0sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDIwMDAwMCwgbWF4VG9rZW5zOiAxNjM4NCB9IF0gfSk7IC8vIE92ZXJyaWRlIGJhc2VVcmwgZm9yIGFuIGV4aXN0aW5nIHByb3ZpZGVyIChrZWVwcyBhbGwgbW9kZWxzKSBwaS5yZWdpc3RlclByb3ZpZGVyKFwiYW50aHJvcGljXCIsIHsgYmFzZVVybDogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tXCIgfSk7IC8vIFJlZ2lzdGVyIHByb3ZpZGVyIHdpdGggT0F1dGggc3VcbmFwaUtleSAtIEFQSSBrZXkgb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS5cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kXG5cbmltcG9ydCB0eXBlIHsgRXh0ZW5zaW9uQVBJIH0gZnJvbSAmcXVvdDtAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudCZxdW90OzsgZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBpOiBFeHRlbnNpb25BUEkpIHsgLy8gT3ZlcnJpZGUgYmFzZVVybCBmb3IgZXhpc3RpbmcgcHJvdmlkZXIgcGkucmVnaXN0ZXJQcm92aWRlcigmcXVvdDthbnRocm9waWMmcXVvdDssIHsgYmFzZVVybDogJnF1b3Q7aHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbSZxdW90OyB9KTsgLy8gUmVnaXN0ZXIgbmV3IHByb3ZpZGVyIHdpdGggbW9kZWxzIHBpLnJlZ2lzdGVyUHJvdmlkZXIoJnF1b3Q7bXktcHJvdmlkZXImcXVvdDssIHsgYmFzZVVybDogJnF1b3Q7aHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20mcXVvdDssIGFwaUtleTogJnF1b3Q7TVlfQVBJX0tFWSZxdW90OywgYXBpOiAmcXVvdDtvcGVuYWktY29tcGxldGlvbnMmcXVvdDssIG1vZGVsczogWyB7IGlkOiAmcXVvdDtteS1tb2RlbCZxdW90OywgbmFtZTogJnF1b3Q7TXkgTW9kZWwmcXVvdDssIHJlYXNvbmluZzogZmFsc2UsIGlucHV0OiBbJnF1b3Q7dGV4dCZxdW90OywgJnF1b3Q7aW1hZ2UmcXVvdDtdLCBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LCBjb250ZXh0V2luZG93OiAxMjgwMDAsIG1heFRva2VuczogNDA5NiB9IF0gfSk7IH1cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2N1c3RvbS1wcm92aWRlci5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbmltcG9ydCB0eXBlIHsgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI7IGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwaTogRXh0ZW5zaW9uQVBJKSB7IC8vIE92ZXJyaWRlIGJhc2VVcmwgZm9yIGV4aXN0aW5nIHByb3ZpZGVyIHBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJhbnRocm9waWNcIiwgeyBiYXNlVXJsOiBcImh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb21cIiB9KTsgLy8gUmVnaXN0ZXIgbmV3IHByb3ZpZGVyIHdpdGggbW9kZWxzIHBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJteS1wcm92aWRlclwiLCB7IGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb21cIiwgYXBpS2V5OiBcIk1ZX0FQSV9LRVlcIiwgYXBpOiBcIm9wZW5haS1jb21wbGV0aW9uc1wiLCBtb2RlbHM6IFsgeyBpZDogXCJteS1tb2RlbFwiLCBuYW1lOiBcIk15IE1vZGVsXCIsIHJlYXNvbmluZzogZmFsc2UsIGlucHV0OiBbXCJ0ZXh0XCIsIFwiaW1hZ2VcIl0sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDEyODAwMCwgbWF4VG9rZW5zOiA0MDk2IH0gXSB9KTsgfVxucGkucmVnaXN0ZXJQcm92aWRlcihcIm15LWxsbVwiLCB7IGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkubXktbGxtLmNvbS92MVwiLCBhcGlLZXk6IFwiTVlfTExNX0FQSV9LRVlcIiwgLy8gZW52IHZhciBuYW1lIG9yIGxpdGVyYWwgdmFsdWUgYXBpOiBcIm9wZW5haS1jb21wbGV0aW9uc1wiLCAvLyB3aGljaCBzdHJlYW1pbmcgQVBJIHRvIHVzZSBtb2RlbHM6IFsgeyBpZDogXCJteS1sbG0tbGFyZ2VcIiwgbmFtZTogXCJNeSBMTE0gTGFyZ2VcIiwgcmVhc29uaW5nOiB0cnVlLCAvLyBzdXBwb3J0cyBleHRlbmRlZCB0aGlua2luZyBpbnB1dDogW1widGV4dFwiLCBcImltYWdlXCJdLCBjb3N0OiB7IGlucHV0OiAzLjAsIC8vICQvbWlsbGlvbiB0b2tlbnMgb3V0cHV0OiAxNS4wLCBjYWNoZVJlYWQ6IDAuMywgY2FjaGVXcml0ZTogMy43NSB9LCBjb250ZXh0V2luZG93OiAyMDAwMDAsIG1heFRva2VuczogMTYzODQgfSBdIH0pO1xucGkucmVnaXN0ZXJQcm92aWRlcihcImN1c3RvbS1hcGlcIiwgeyBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmV4YW1wbGUuY29tXCIsIGFwaUtleTogXCJNWV9BUElfS0VZXCIsIGF1dGhIZWFkZXI6IHRydWUsIC8vIGFkZHMgQXV0aG9yaXphdGlvbjogQmVhcmVyIGhlYWRlciBhcGk6IFwib3BlbmFpLWNvbXBsZXRpb25zXCIsIG1vZGVsczogWy4uLl0gfSk7XG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL21vZGVscy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL21vZGVscy5tZFxuXG4mcXVvdDthcGlLZXkmcXVvdDs6ICZxdW90OyFzZWN1cml0eSBmaW5kLWdlbmVyaWMtcGFzc3dvcmQgLXdzICYjeDI3O2FudGhyb3BpYyYjeDI3OyZxdW90OyAmcXVvdDthcGlLZXkmcXVvdDs6ICZxdW90OyFvcCByZWFkICYjeDI3O29wOi8vdmF1bHQvaXRlbS9jcmVkZW50aWFsJiN4Mjc7JnF1b3Q7IEVudmlyb25tZW50IHZhcmlhYmxlOiBVc2VzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgdmFyaWFibGUgLi4uIHsgJnF1b3Q7cHJvdmlkZXJzJnF1b3Q7OiB7ICZxdW90O2N1c3RvbS1wcm94eSZxdW90OzogeyAmcXVvdDtiYXNlVXJsJnF1b3Q7OiAmcXVvdDtodHRwczovL3Byb3h5LmV4YW1wbGUuY29tL3YxJnF1b3Q7LCAmcXVvdDthcGlLZXkmcXVvdDs6ICZxdW90O01ZX0FQSV9LRVkmcXVvdDssICZxdW90O2FwaSZxdW90OzogJnF1b3Q7YW50aHJvcGljLW1lc3NhZ2VzJnF1b3Q7LCAmcXVvdDtoZWFkZXJzJnF1b3Q7OiB7ICZxdW90O3gtcG9ydGtleS1hcGkta2V5JnF1b3Q7OiAmcXVvdDtQT1JUS0VZX0FQSV9LRVkmcXVvdDssICZxdW90O3gtc2VjcmV0JnF1b3Q7OiAmcXVvdDshb3AgcmVhZCAmI3gyNztvcDovL3ZhdWx0L2l0ZW0vc2VjcmV0JiN4Mjc7JnF1b3Q7IH0sICZxdW90O21vZGVscyZxdW90OzogWy4uLl0gfSB9IH1cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL21vZGVscy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbllvdSBjYW4gY29tYmluZSBwcm92aWRlci1sZXZlbCBiYXNlVXJsL2hlYWRlcnMgd2l0aCBtb2RlbE92ZXJyaWRlcy5cblRoZSBhcGlLZXkgaXMgcmVxdWlyZWQgYnV0IE9sbGFtYSBpZ25vcmVzIGl0LCBzbyBhbnkgdmFsdWUgd29ya3MuIC4uLiB7IFwicHJvdmlkZXJzXCI6IHsgXCJvbGxhbWFcIjogeyBcImJhc2VVcmxcIjogXCJodHRwOi8vbG9jYWxob3N0OjExNDM0L3YxXCIsIFwiYXBpXCI6IFwib3BlbmFpLWNvbXBsZXRpb25zXCIsIFwiYXBpS2V5XCI6IFwib2xsYW1hXCIsIFwibW9kZWxzXCI6IFsgeyBcImlkXCI6IFwibGxhbWEzLjE6OGJcIiwgXCJuYW1lXCI6IFwiTGxhbWEgMy4xIDhCIChMb2NhbClcIiwgXCJyZWFzb25pbmdcIjogZmFsc2UsIFwiaW5wdXRcIjogW1widGV4dFwiXSwgXCJjb250ZXh0V2luZG93XCI6IDEyODAwMCwgXCJtYXhUb2tlbnNcIjogMzIwMDAsIFwiY29zdFwiOiB7IFwiaW5wdXRcIjogMCwgXCJvdXRwdXRcIjogMCwgXCJjYWNoZVJlYWRcIjogMCwgXCJjYWNoZVdyaXRlXCI6IDAgfSB9IF0gfSB9IH1cblwiYXBpS2V5XCI6IFwiIXNlY3VyaXR5IGZpbmQtZ2VuZXJpYy1wYXNzd29yZCAtd3MgJ2FudGhyb3BpYydcIiBcImFwaUtleVwiOiBcIiFvcCByZWFkICdvcDovL3ZhdWx0L2l0ZW0vY3JlZGVudGlhbCdcIiBFbnZpcm9ubWVudCB2YXJpYWJsZTogVXNlcyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIHZhcmlhYmxlIC4uLiB7IFwicHJvdmlkZXJzXCI6IHsgXCJjdXN0b20tcHJveHlcIjogeyBcImJhc2VVcmxcIjogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tL3YxXCIsIFwiYXBpS2V5XCI6IFwiTVlfQVBJX0tFWVwiLCBcImFwaVwiOiBcImFudGhyb3BpYy1tZXNzYWdlc1wiLCBcImhlYWRlcnNcIjogeyBcIngtcG9ydGtleS1hcGkta2V5XCI6IFwiUE9SVEtFWV9BUElfS0VZXCIsIFwieC1zZWNyZXRcIjogXCIhb3AgcmVhZCAnb3A6Ly92YXVsdC9pdGVtL3NlY3JldCdcIiB9LCBcIm1vZGVsc1wiOiBbLi4uXSB9IH0gfVxuXG4tLS1cblxuIyMgR2l0SHViIC0gYmFkbG9naWMvcGktbW9ubzogQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kc1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9ub1xuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvYWkvUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvUkVBRE1FLm1kXG5cbmltcG9ydCB7IE1vZGVsLCBzdHJlYW0gfSBmcm9tICYjeDI3O0BtYXJpb3plY2huZXIvcGktYWkmI3gyNzs7IC8vIEV4YW1wbGU6IE9sbGFtYSB1c2luZyBPcGVuQUktY29tcGF0aWJsZSBBUEkgY29uc3Qgb2xsYW1hTW9kZWw6IE1vZGVsJmx0OyYjeDI3O29wZW5haS1jb21wbGV0aW9ucyYjeDI3OyZndDsgPSB7IGlkOiAmI3gyNztsbGFtYS0zLjEtOGImI3gyNzssIG5hbWU6ICYjeDI3O0xsYW1hIDMuMSA4QiAoT2xsYW1hKSYjeDI3OywgYXBpOiAmI3gyNztvcGVuYWktY29tcGxldGlvbnMmI3gyNzssIHByb3ZpZGVyOiAmI3gyNztvbGxhbWEmI3gyNzssIGJhc2VVcmw6ICYjeDI3O2h0dHA6Ly9sb2NhbGhvc3Q6MTE0MzQvdjEmI3gyNzssIHJlYXNvbmluZzogZmFsc2UsIGlucHV0OiBbJiN4Mjc7dGV4dCYjeDI3O10sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDEyODAwMCwgbWF4VG9rZW5zOiAzMjAwMCB9OyAvLyBFeGFtcGxlOiBMaXRlTExNIHByb3h5IHdpdGggZXhwbGljaXQgY29tcGF0IHNldHRpbmdzIGNvbnN0IGxpdGVsbG1Nb2RlbDogTW9kZWwmbHQ7JiN4Mjc7b3BlbmFpLWNvbXBsZXRpb25zJiN4Mjc7Jmd0OyA9IHsgaWQ6ICYjeDI3O2dwdC00byYjeDI3OywgbmFtZTogJiN4Mjc7R1BULTRvICh2aWEgTGl0ZUxMTSkmI3gyNzssIGFwaTogJiN4Mjc7b3BlbmFpLWNvbXBsZXRpb25cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2FpL1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbkdvb2dsZSBHZW1pbmkgQ0xJIC8gQW50aWdyYXZpdHk6IFRoZXNlIHVzZSBHb29nbGUgQ2xvdWQgT0F1dGguIFRoZSBhcGlLZXkgcmV0dXJuZWQgYnkgZ2V0T0F1dGhBcGlLZXkoKSBpcyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgYm90aCB0aGUgdG9rZW4gYW5kIHByb2plY3QgSUQsIHdoaWNoIHRoZSBsaWJyYXJ5IGhhbmRsZXMgYXV0b21hdGljYWxseS5cbmltcG9ydCB7IE1vZGVsLCBzdHJlYW0gfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJzsgLy8gRXhhbXBsZTogT2xsYW1hIHVzaW5nIE9wZW5BSS1jb21wYXRpYmxlIEFQSSBjb25zdCBvbGxhbWFNb2RlbDogTW9kZWw8J29wZW5haS1jb21wbGV0aW9ucyc+ID0geyBpZDogJ2xsYW1hLTMuMS04YicsIG5hbWU6ICdMbGFtYSAzLjEgOEIgKE9sbGFtYSknLCBhcGk6ICdvcGVuYWktY29tcGxldGlvbnMnLCBwcm92aWRlcjogJ29sbGFtYScsIGJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjExNDM0L3YxJywgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFsndGV4dCddLCBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LCBjb250ZXh0V2luZG93OiAxMjgwMDAsIG1heFRva2VuczogMzIwMDAgfTsgLy8gRXhhbXBsZTogTGl0ZUxMTSBwcm94eSB3aXRoIGV4cGxpY2l0IGNvbXBhdCBzZXR0aW5ncyBjb25zdCBsaXRlbGxtTW9kZWw6IE1vZGVsPCdvcGVuYWktY29tcGxldGlvbnMnPiA9IHsgaWQ6ICdncHQtNG8nLCBuYW1lOiAnR1BULTRvICh2aWEgTGl0ZUxMTSknLCBhcGk6ICdvcGVuYWktY29tcGxldGlvblxuaW1wb3J0IHsgZ2V0TW9kZWwsIGNvbXBsZXRlIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7IC8vIEFQSSBrZXkgbXVzdCBiZSBwYXNzZWQgZXhwbGljaXRseSBpbiBicm93c2VyIGNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtMy01LWhhaWt1LTIwMjQxMDIyJyk7IGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIHsgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ0hlbGxvIScgfV0gfSwgeyBhcGlLZXk6ICd5b3VyLWFwaS1rZXknIH0pO1xuXG4tLS1cblxuIyMgUmVsZWFzZXMgwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9yZWxlYXNlc1xuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBiYWRsb2dpYy9waS1tb25vXG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9DSEFOR0VMT0cubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvQ0hBTkdFTE9HLm1kXG5cbkN1c3RvbSBwcm92aWRlcnMgdmlhIHBpLnJlZ2lzdGVyUHJvdmlkZXIoKSBmb3IgcHJveGllcywgY3VzdG9tIGVuZHBvaW50cywgT0F1dGggb3IgU1NPIGZsb3dzLCBhbmQgbm9uLXN0YW5kYXJkIHN0cmVhbWluZyBBUElzLlxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L0NIQU5HRUxPRy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbkN1c3RvbSBwcm92aWRlcnMgdmlhIHBpLnJlZ2lzdGVyUHJvdmlkZXIoKSBmb3IgcHJveGllcywgY3VzdG9tIGVuZHBvaW50cywgT0F1dGggb3IgU1NPIGZsb3dzLCBhbmQgbm9uLXN0YW5kYXJkIHN0cmVhbWluZyBBUElzLlxuSW1wcm92ZWQgZXJyb3IgbWVzc2FnZXM6IEJldHRlciBlcnJvciBtZXNzYWdlcyB3aGVuIGFwaUtleSBvciBtb2RlbCBhcmUgbWlzc2luZy5cbkZpeGVkIE9wZW5BSSBDb2RleCBSZXNwb25zZXMgcHJvdmlkZXIgdG8gcmVzcGVjdCBjb25maWd1cmVkIGJhc2VVcmwgKCMxMjQ0KVxuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9haSBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vdHJlZS9tYWluL3BhY2thZ2VzL2FpXG5cbmltcG9ydCB7IE1vZGVsLCBzdHJlYW0gfSBmcm9tICYjeDI3O0BtYXJpb3plY2huZXIvcGktYWkmI3gyNzs7IC8vIEV4YW1wbGU6IE9sbGFtYSB1c2luZyBPcGVuQUktY29tcGF0aWJsZSBBUEkgY29uc3Qgb2xsYW1hTW9kZWw6IE1vZGVsJmx0OyYjeDI3O29wZW5haS1jb21wbGV0aW9ucyYjeDI3OyZndDsgPSB7IGlkOiAmI3gyNztsbGFtYS0zLjEtOGImI3gyNzssIG5hbWU6ICYjeDI3O0xsYW1hIDMuMSA4QiAoT2xsYW1hKSYjeDI3OywgYXBpOiAmI3gyNztvcGVuYWktY29tcGxldGlvbnMmI3gyNzssIHByb3ZpZGVyOiAmI3gyNztvbGxhbWEmI3gyNzssIGJhc2VVcmw6ICYjeDI3O2h0dHA6Ly9sb2NhbGhvc3Q6MTE0MzQvdjEmI3gyNzssIHJlYXNvbmluZzogZmFsc2UsIGlucHV0OiBbJiN4Mjc7dGV4dCYjeDI3O10sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDEyODAwMCwgbWF4VG9rZW5zOiAzMjAwMCB9OyAvLyBFeGFtcGxlOiBMaXRlTExNIHByb3h5IHdpdGggZXhwbGljaXQgY29tcGF0IHNldHRpbmdzIGNvbnN0IGxpdGVsbG1Nb2RlbDogTW9kZWwmbHQ7JiN4Mjc7b3BlbmFpLWNvbXBsZXRpb25zJiN4Mjc7Jmd0OyA9IHsgaWQ6ICYjeDI3O2dwdC00byYjeDI3OywgbmFtZTogJiN4Mjc7R1BULTRvICh2aWEgTGl0ZUxMTSkmI3gyNzssIGFwaTogJiN4Mjc7b3BlbmFpLWNvbXBsZXRpb25cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2FpIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuR29vZ2xlIEdlbWluaSBDTEkgLyBBbnRpZ3Jhdml0eTogVGhlc2UgdXNlIEdvb2dsZSBDbG91ZCBPQXV0aC4gVGhlIGFwaUtleSByZXR1cm5lZCBieSBnZXRPQXV0aEFwaUtleSgpIGlzIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBib3RoIHRoZSB0b2tlbiBhbmQgcHJvamVjdCBJRCwgd2hpY2ggdGhlIGxpYnJhcnkgaGFuZGxlcyBhdXRvbWF0aWNhbGx5LlxuaW1wb3J0IHsgTW9kZWwsIHN0cmVhbSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknOyAvLyBFeGFtcGxlOiBPbGxhbWEgdXNpbmcgT3BlbkFJLWNvbXBhdGlibGUgQVBJIGNvbnN0IG9sbGFtYU1vZGVsOiBNb2RlbDwnb3BlbmFpLWNvbXBsZXRpb25zJz4gPSB7IGlkOiAnbGxhbWEtMy4xLThiJywgbmFtZTogJ0xsYW1hIDMuMSA4QiAoT2xsYW1hKScsIGFwaTogJ29wZW5haS1jb21wbGV0aW9ucycsIHByb3ZpZGVyOiAnb2xsYW1hJywgYmFzZVVybDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MTE0MzQvdjEnLCByZWFzb25pbmc6IGZhbHNlLCBpbnB1dDogWyd0ZXh0J10sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDEyODAwMCwgbWF4VG9rZW5zOiAzMjAwMCB9OyAvLyBFeGFtcGxlOiBMaXRlTExNIHByb3h5IHdpdGggZXhwbGljaXQgY29tcGF0IHNldHRpbmdzIGNvbnN0IGxpdGVsbG1Nb2RlbDogTW9kZWw8J29wZW5haS1jb21wbGV0aW9ucyc+ID0geyBpZDogJ2dwdC00bycsIG5hbWU6ICdHUFQtNG8gKHZpYSBMaXRlTExNKScsIGFwaTogJ29wZW5haS1jb21wbGV0aW9uXG5pbXBvcnQgeyBnZXRNb2RlbCwgY29tcGxldGUgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJzsgLy8gQVBJIGtleSBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5IGluIGJyb3dzZXIgY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnYW50aHJvcGljJywgJ2NsYXVkZS0zLTUtaGFpa3UtMjAyNDEwMjInKTsgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgeyBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnSGVsbG8hJyB9XSB9LCB7IGFwaUtleTogJ3lvdXItYXBpLWtleScgfSk7XG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9SRUFETUUubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvUkVBRE1FLm1kXG5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kXG5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9wcm92aWRlcnMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9wcm92aWRlcnMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5cbi0tLVxuXG4jIyBiYWRsb2dpYy9waS1tb25vIHwgRGVlcFdpa2lcblVSTDogaHR0cHM6Ly9kZWVwd2lraS5jb20vYmFkbG9naWMvcGktbW9ub1xuXG5UaGlzIGRvY3VtZW50IHByb3ZpZGVzIGFuIGFyY2hpdGVjdHVyYWwgb3ZlcnZpZXcgb2YgdGhlIHBpLW1vbm8gcmVwb3NpdG9yeSwgYSBtb25vcmVwbyBjb250YWluaW5nIHBhY2thZ2VzIGZvciBidWlsZGluZyBBSSBjb2RpbmcgYWdlbnRzLiBJdCBkZXNjcmliZXMgdGhlIHBhY2thZ2Ugc3RydWN0dXJlLCBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMsXG5cbi0tLVxuXG4jIyBBY3Rpdml0eSDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2FjdGl2aXR5XG5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gQWN0aXZpdHkgwrcgYmFkbG9naWMvcGktbW9ub1xuXG4tLS1cblxuIyMgV2hhdCBJIGxlYXJuZWQgYnVpbGRpbmcgYW4gb3BpbmlvbmF0ZWQgYW5kIG1pbmltYWwgY29kaW5nIGFnZW50XG5VUkw6IGh0dHBzOi8vbWFyaW96ZWNobmVyLmF0L3Bvc3RzLzIwMjUtMTEtMzAtcGktY29kaW5nLWFnZW50L1xuXG5UaGUgYWdlbnQgcmVhZHMgdGhlIFJFQURNRSB3aGVuIGl0IG5lZWRzIHRoZSB0b29sLCBwYXlzIHRoZSB0b2tlbiBjb3N0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKHByb2dyZXNzaXZlIGRpc2Nsb3N1cmUpLCBhbmQgY2FuIHVzZSBiYXNoIHRvIGludm9rZSB0aGUgdG9vbC4gVGhpcyBhcHByb2FjaCBpcyBjb21wb3NhYmxlIChwaXBlIG91dHB1dHMsIGNoYWluIGNvbW1hbmRzKSwgZWFzeSB0byBleHRlbmQgKGp1c3QgYWRkIGFub3RoZXIgc2NyaXB0KSwgYW5kIHRva2VuLWVmZmljaWVudC4gLi4uIEkgbWFpbnRhaW4gYSBjb2xsZWN0aW9uIG9mIHRoZXNlIHRvb2xzIGF0IGdpdGh1Yi5jb20vYmFkbG9naWMvYWdlbnQtdG9vbHMuXG5UaGUgYWdlbnQgcmVhZHMgdGhlIFJFQURNRSB3aGVuIGl0IG5lZWRzIHRoZSB0b29sLCBwYXlzIHRoZSB0b2tlbiBjb3N0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKHByb2dyZXNzaXZlIGRpc2Nsb3N1cmUpLCBhbmQgY2FuIHVzZSBiYXNoIHRvIGludm9rZSB0aGUgdG9vbC4gVGhpcyBhcHByb2FjaCBpcyBjb21wb3NhYmxlIChwaXBlIG91dHB1dHMsIGNoYWluIGNvbW1hbmRzKSwgZWFzeSB0byBleHRlbmQgKGp1c3QgYWRkIGFub3RoZXIgc2NyaXB0KSwgYW5kIHRva2VuLWVmZmljaWVudC4gLi4uIEkgbWFpbnRhaW4gYSBjb2xsZWN0aW9uIG9mIHRoZXNlIHRvb2xzIGF0IGdpdGh1Yi5jb20vYmFkbG9naWMvYWdlbnQtdG9vbHMuXG5KdXN0IGxvb2sgYXQgdGhlIHBpLW1vbm8gaXNzdWUgdHJhY2tlciBhbmQgdGhlIHB1bGwgcmVxdWVzdHMuIE1hbnkgZ2V0IGNsb3NlZCBvciByZXZpc2VkIGJlY2F1c2UgdGhlIGFnZW50cyBjb3VsZG4ndCBmdWxseSBncmFzcCB3aGF0J3MgbmVlZGVkLiBUaGF0J3Mgbm90IHRoZSBmYXVsdCBvZiB0aGUgY29udHJpYnV0b3JzLCB3aGljaCBJIHRydWx5IGFwcHJlY2lhdGUgYmVjYXVzZSBldmVuIGluY29tcGxldGUgUFJzIGhlbHAgbWUgbW92ZSBmYXN0ZXIuXG5UbyBlbnN1cmUgYWxsIGZlYXR1cmVzIGFjdHVhbGx5IHdvcmsgYWNyb3NzIHRoZSBnYXppbGxpb24gb2YgcHJvdmlkZXJzLCBwaS1haSBoYXMgYSBwcmV0dHkgZXh0ZW5zaXZlIHRlc3Qgc3VpdGUgY292ZXJpbmcgaW1hZ2UgaW5wdXRzLCByZWFzb25pbmcgdHJhY2VzLCB0b29sIGNhbGxpbmcsIGFuZCBvdGhlciBmZWF0dXJlcyB5b3UnZCBleHBlY3QgZnJvbSBhbiBMTE0gQVBJLiBUZXN0cyBydW4gYWNyb3NzIGFsbCBzdXBwb3J0ZWQgcHJvdmlkZXJzIGFuZCBwb3B1bGFyIG1vZGVscy5cblNvbWUgcmVwb3J0IHRva2VuIGNvdW50cyBhdCB0aGUgc3RhcnQgb2YgdGhlIFNTRSBzdHJlYW0sIG90aGVycyBvbmx5IGF0IHRoZSBlbmQsIG1ha2luZyBhY2N1cmF0ZSBjb3N0IHRyYWNraW5nIGltcG9zc2libGUgaWYgYSByZXF1ZXN0IGlzIGFib3J0ZWQuIFRvIGFkZCBpbnN1bHQgdG8gaW5qdXJ5LCB5b3UgY2FuJ3QgcHJvdmlkZSBhIHVuaXF1ZSBJRCB0byBsYXRlciBjb3JyZWxhdGUgd2l0aCB0aGVpciBiaWxsaW5nIEFQSXMgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggb2YgeW91ciB1c2VycyBjb25zdW1lZCBob3cgbWFueSB0b2tlbnMuIFNvIHBpLWFpIGRvZXMgdG9rZW4gYW5kIGNhY2hlIHRyYWNraW5nIG9uIGEgYmVzdC1lZmZvcnQgYmFzaXMuXG5cbi0tLVxuXG4jIyBwaS5kZXZcblVSTDogaHR0cHM6Ly9zaGl0dHljb2RpbmdhZ2VudC5haS9cblxuJCBwaSBpbnN0YWxsIG5wbTpAZm9vL3BpLXRvb2xzICQgcGkgaW5zdGFsbCBnaXQ6Z2l0aHViLmNvbS9iYWRsb2dpYy9waS1kb29tXG4kIHBpIGluc3RhbGwgbnBtOkBmb28vcGktdG9vbHMgJCBwaSBpbnN0YWxsIGdpdDpnaXRodWIuY29tL2JhZGxvZ2ljL3BpLWRvb21cbkEgdGVybWluYWwtYmFzZWQgY29kaW5nIGFnZW50XG5cbi0tLVxuXG4jIyBwaS1tb25vL1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL1JFQURNRS5tZFxuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL1JFQURNRS5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3RyZWUvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jc1xuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3RyZWUvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXNcblxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJmFtcDsgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBiYWRsb2dpYy9waS1tb25vXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZXhhbXBsZXMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5cbi0tLVxuXG4jIyBwaS1tb25vL3BhY2thZ2VzL2FnZW50IGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvYWdlbnRcblxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJmFtcDsgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBiYWRsb2dpYy9waS1tb25vXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9hZ2VudCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuLS0tXG5cbiMjIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50IGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuVVJMOiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50XG5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50IGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuXG4tLS1cblxuIyMgcGktbW9uby9wYWNrYWdlcyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblVSTDogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vdHJlZS9tYWluL3BhY2thZ2VzXG5cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG5cbi0tLVxuXG4ifV0sImRldGFpbHMiOnsicmVzdWx0cyI6W3siY29udGVudCI6Ii8vIFJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVyIHdpdGggY3VzdG9tIG1vZGVscyBwaS5yZWdpc3RlclByb3ZpZGVyKCZxdW90O215LXByb3h5JnF1b3Q7LCB7IGJhc2VVcmw6ICZxdW90O2h0dHBzOi8vcHJveHkuZXhhbXBsZS5jb20mcXVvdDssIGFwaUtleTogJnF1b3Q7UFJPWFlfQVBJX0tFWSZxdW90OywgLy8gZW52IHZhciBuYW1lIG9yIGxpdGVyYWwgYXBpOiAmcXVvdDthbnRocm9waWMtbWVzc2FnZXMmcXVvdDssIG1vZGVsczogWyB7IGlkOiAmcXVvdDtjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQmcXVvdDssIG5hbWU6ICZxdW90O0NsYXVkZSA0IFNvbm5ldCAocHJveHkpJnF1b3Q7LCByZWFzb25pbmc6IGZhbHNlLCBpbnB1dDogWyZxdW90O3RleHQmcXVvdDssICZxdW90O2ltYWdlJnF1b3Q7XSwgY29zdDogeyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfSwgY29udGV4dFdpbmRvdzogMjAwMDAwLCBtYXhUb2tlbnM6IDE2Mzg0IH0gXSB9KTsgLy8gT3ZlcnJpZGUgYmFzZVVybCBmb3IgYW4gZXhpc3RpbmcgcHJvdmlkZXIgKGtlZXBzIGFsbCBtb2RlbHMpIHBpLnJlZ2lzdGVyUHJvdmlkZXIoJnF1b3Q7YW50aHJvcGljJnF1b3Q7LCB7IGJhc2VVcmw6ICZxdW90O2h0dHBzOi8vcHJveHkuZXhhbXBsZS5jb20mcXVvdDsgfSk7IC8vIFJlZ2lzdGVyIHByb3ZpZGVyIHdpdGggT0F1dGggc3VcbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2V4dGVuc2lvbnMubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vXG4vLyBSZWdpc3RlciBhIG5ldyBwcm92aWRlciB3aXRoIGN1c3RvbSBtb2RlbHMgcGkucmVnaXN0ZXJQcm92aWRlcihcIm15LXByb3h5XCIsIHsgYmFzZVVybDogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tXCIsIGFwaUtleTogXCJQUk9YWV9BUElfS0VZXCIsIC8vIGVudiB2YXIgbmFtZSBvciBsaXRlcmFsIGFwaTogXCJhbnRocm9waWMtbWVzc2FnZXNcIiwgbW9kZWxzOiBbIHsgaWQ6IFwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0XCIsIG5hbWU6IFwiQ2xhdWRlIDQgU29ubmV0IChwcm94eSlcIiwgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFtcInRleHRcIiwgXCJpbWFnZVwiXSwgY29zdDogeyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfSwgY29udGV4dFdpbmRvdzogMjAwMDAwLCBtYXhUb2tlbnM6IDE2Mzg0IH0gXSB9KTsgLy8gT3ZlcnJpZGUgYmFzZVVybCBmb3IgYW4gZXhpc3RpbmcgcHJvdmlkZXIgKGtlZXBzIGFsbCBtb2RlbHMpIHBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJhbnRocm9waWNcIiwgeyBiYXNlVXJsOiBcImh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb21cIiB9KTsgLy8gUmVnaXN0ZXIgcHJvdmlkZXIgd2l0aCBPQXV0aCBzdVxuYXBpS2V5IC0gQVBJIGtleSBvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lLiIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvZXh0ZW5zaW9ucy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9leHRlbnNpb25zLm1kIn0seyJjb250ZW50IjoiaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25BUEkgfSBmcm9tICZxdW90O0BtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50JnF1b3Q7OyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocGk6IEV4dGVuc2lvbkFQSSkgeyAvLyBPdmVycmlkZSBiYXNlVXJsIGZvciBleGlzdGluZyBwcm92aWRlciBwaS5yZWdpc3RlclByb3ZpZGVyKCZxdW90O2FudGhyb3BpYyZxdW90OywgeyBiYXNlVXJsOiAmcXVvdDtodHRwczovL3Byb3h5LmV4YW1wbGUuY29tJnF1b3Q7IH0pOyAvLyBSZWdpc3RlciBuZXcgcHJvdmlkZXIgd2l0aCBtb2RlbHMgcGkucmVnaXN0ZXJQcm92aWRlcigmcXVvdDtteS1wcm92aWRlciZxdW90OywgeyBiYXNlVXJsOiAmcXVvdDtodHRwczovL2FwaS5leGFtcGxlLmNvbSZxdW90OywgYXBpS2V5OiAmcXVvdDtNWV9BUElfS0VZJnF1b3Q7LCBhcGk6ICZxdW90O29wZW5haS1jb21wbGV0aW9ucyZxdW90OywgbW9kZWxzOiBbIHsgaWQ6ICZxdW90O215LW1vZGVsJnF1b3Q7LCBuYW1lOiAmcXVvdDtNeSBNb2RlbCZxdW90OywgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFsmcXVvdDt0ZXh0JnF1b3Q7LCAmcXVvdDtpbWFnZSZxdW90O10sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDEyODAwMCwgbWF4VG9rZW5zOiA0MDk2IH0gXSB9KTsgfVxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25BUEkgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjsgZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBpOiBFeHRlbnNpb25BUEkpIHsgLy8gT3ZlcnJpZGUgYmFzZVVybCBmb3IgZXhpc3RpbmcgcHJvdmlkZXIgcGkucmVnaXN0ZXJQcm92aWRlcihcImFudGhyb3BpY1wiLCB7IGJhc2VVcmw6IFwiaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbVwiIH0pOyAvLyBSZWdpc3RlciBuZXcgcHJvdmlkZXIgd2l0aCBtb2RlbHMgcGkucmVnaXN0ZXJQcm92aWRlcihcIm15LXByb3ZpZGVyXCIsIHsgYmFzZVVybDogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiLCBhcGlLZXk6IFwiTVlfQVBJX0tFWVwiLCBhcGk6IFwib3BlbmFpLWNvbXBsZXRpb25zXCIsIG1vZGVsczogWyB7IGlkOiBcIm15LW1vZGVsXCIsIG5hbWU6IFwiTXkgTW9kZWxcIiwgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFtcInRleHRcIiwgXCJpbWFnZVwiXSwgY29zdDogeyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfSwgY29udGV4dFdpbmRvdzogMTI4MDAwLCBtYXhUb2tlbnM6IDQwOTYgfSBdIH0pOyB9XG5waS5yZWdpc3RlclByb3ZpZGVyKFwibXktbGxtXCIsIHsgYmFzZVVybDogXCJodHRwczovL2FwaS5teS1sbG0uY29tL3YxXCIsIGFwaUtleTogXCJNWV9MTE1fQVBJX0tFWVwiLCAvLyBlbnYgdmFyIG5hbWUgb3IgbGl0ZXJhbCB2YWx1ZSBhcGk6IFwib3BlbmFpLWNvbXBsZXRpb25zXCIsIC8vIHdoaWNoIHN0cmVhbWluZyBBUEkgdG8gdXNlIG1vZGVsczogWyB7IGlkOiBcIm15LWxsbS1sYXJnZVwiLCBuYW1lOiBcIk15IExMTSBMYXJnZVwiLCByZWFzb25pbmc6IHRydWUsIC8vIHN1cHBvcnRzIGV4dGVuZGVkIHRoaW5raW5nIGlucHV0OiBbXCJ0ZXh0XCIsIFwiaW1hZ2VcIl0sIGNvc3Q6IHsgaW5wdXQ6IDMuMCwgLy8gJC9taWxsaW9uIHRva2VucyBvdXRwdXQ6IDE1LjAsIGNhY2hlUmVhZDogMC4zLCBjYWNoZVdyaXRlOiAzLjc1IH0sIGNvbnRleHRXaW5kb3c6IDIwMDAwMCwgbWF4VG9rZW5zOiAxNjM4NCB9IF0gfSk7XG5waS5yZWdpc3RlclByb3ZpZGVyKFwiY3VzdG9tLWFwaVwiLCB7IGJhc2VVcmw6IFwiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb21cIiwgYXBpS2V5OiBcIk1ZX0FQSV9LRVlcIiwgYXV0aEhlYWRlcjogdHJ1ZSwgLy8gYWRkcyBBdXRob3JpemF0aW9uOiBCZWFyZXIgaGVhZGVyIGFwaTogXCJvcGVuYWktY29tcGxldGlvbnNcIiwgbW9kZWxzOiBbLi4uXSB9KTsiLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL2N1c3RvbS1wcm92aWRlci5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9jdXN0b20tcHJvdmlkZXIubWQifSx7ImNvbnRlbnQiOiImcXVvdDthcGlLZXkmcXVvdDs6ICZxdW90OyFzZWN1cml0eSBmaW5kLWdlbmVyaWMtcGFzc3dvcmQgLXdzICYjeDI3O2FudGhyb3BpYyYjeDI3OyZxdW90OyAmcXVvdDthcGlLZXkmcXVvdDs6ICZxdW90OyFvcCByZWFkICYjeDI3O29wOi8vdmF1bHQvaXRlbS9jcmVkZW50aWFsJiN4Mjc7JnF1b3Q7IEVudmlyb25tZW50IHZhcmlhYmxlOiBVc2VzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgdmFyaWFibGUgLi4uIHsgJnF1b3Q7cHJvdmlkZXJzJnF1b3Q7OiB7ICZxdW90O2N1c3RvbS1wcm94eSZxdW90OzogeyAmcXVvdDtiYXNlVXJsJnF1b3Q7OiAmcXVvdDtodHRwczovL3Byb3h5LmV4YW1wbGUuY29tL3YxJnF1b3Q7LCAmcXVvdDthcGlLZXkmcXVvdDs6ICZxdW90O01ZX0FQSV9LRVkmcXVvdDssICZxdW90O2FwaSZxdW90OzogJnF1b3Q7YW50aHJvcGljLW1lc3NhZ2VzJnF1b3Q7LCAmcXVvdDtoZWFkZXJzJnF1b3Q7OiB7ICZxdW90O3gtcG9ydGtleS1hcGkta2V5JnF1b3Q7OiAmcXVvdDtQT1JUS0VZX0FQSV9LRVkmcXVvdDssICZxdW90O3gtc2VjcmV0JnF1b3Q7OiAmcXVvdDshb3AgcmVhZCAmI3gyNztvcDovL3ZhdWx0L2l0ZW0vc2VjcmV0JiN4Mjc7JnF1b3Q7IH0sICZxdW90O21vZGVscyZxdW90OzogWy4uLl0gfSB9IH1cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL21vZGVscy5tZCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbllvdSBjYW4gY29tYmluZSBwcm92aWRlci1sZXZlbCBiYXNlVXJsL2hlYWRlcnMgd2l0aCBtb2RlbE92ZXJyaWRlcy5cblRoZSBhcGlLZXkgaXMgcmVxdWlyZWQgYnV0IE9sbGFtYSBpZ25vcmVzIGl0LCBzbyBhbnkgdmFsdWUgd29ya3MuIC4uLiB7IFwicHJvdmlkZXJzXCI6IHsgXCJvbGxhbWFcIjogeyBcImJhc2VVcmxcIjogXCJodHRwOi8vbG9jYWxob3N0OjExNDM0L3YxXCIsIFwiYXBpXCI6IFwib3BlbmFpLWNvbXBsZXRpb25zXCIsIFwiYXBpS2V5XCI6IFwib2xsYW1hXCIsIFwibW9kZWxzXCI6IFsgeyBcImlkXCI6IFwibGxhbWEzLjE6OGJcIiwgXCJuYW1lXCI6IFwiTGxhbWEgMy4xIDhCIChMb2NhbClcIiwgXCJyZWFzb25pbmdcIjogZmFsc2UsIFwiaW5wdXRcIjogW1widGV4dFwiXSwgXCJjb250ZXh0V2luZG93XCI6IDEyODAwMCwgXCJtYXhUb2tlbnNcIjogMzIwMDAsIFwiY29zdFwiOiB7IFwiaW5wdXRcIjogMCwgXCJvdXRwdXRcIjogMCwgXCJjYWNoZVJlYWRcIjogMCwgXCJjYWNoZVdyaXRlXCI6IDAgfSB9IF0gfSB9IH1cblwiYXBpS2V5XCI6IFwiIXNlY3VyaXR5IGZpbmQtZ2VuZXJpYy1wYXNzd29yZCAtd3MgJ2FudGhyb3BpYydcIiBcImFwaUtleVwiOiBcIiFvcCByZWFkICdvcDovL3ZhdWx0L2l0ZW0vY3JlZGVudGlhbCdcIiBFbnZpcm9ubWVudCB2YXJpYWJsZTogVXNlcyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIHZhcmlhYmxlIC4uLiB7IFwicHJvdmlkZXJzXCI6IHsgXCJjdXN0b20tcHJveHlcIjogeyBcImJhc2VVcmxcIjogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tL3YxXCIsIFwiYXBpS2V5XCI6IFwiTVlfQVBJX0tFWVwiLCBcImFwaVwiOiBcImFudGhyb3BpYy1tZXNzYWdlc1wiLCBcImhlYWRlcnNcIjogeyBcIngtcG9ydGtleS1hcGkta2V5XCI6IFwiUE9SVEtFWV9BUElfS0VZXCIsIFwieC1zZWNyZXRcIjogXCIhb3AgcmVhZCAnb3A6Ly92YXVsdC9pdGVtL3NlY3JldCdcIiB9LCBcIm1vZGVsc1wiOiBbLi4uXSB9IH0gfSIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvbW9kZWxzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL21vZGVscy5tZCJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ubyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6IkdpdEh1YiAtIGJhZGxvZ2ljL3BpLW1vbm86IEFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMiLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vIn0seyJjb250ZW50IjoiaW1wb3J0IHsgTW9kZWwsIHN0cmVhbSB9IGZyb20gJiN4Mjc7QG1hcmlvemVjaG5lci9waS1haSYjeDI3OzsgLy8gRXhhbXBsZTogT2xsYW1hIHVzaW5nIE9wZW5BSS1jb21wYXRpYmxlIEFQSSBjb25zdCBvbGxhbWFNb2RlbDogTW9kZWwmbHQ7JiN4Mjc7b3BlbmFpLWNvbXBsZXRpb25zJiN4Mjc7Jmd0OyA9IHsgaWQ6ICYjeDI3O2xsYW1hLTMuMS04YiYjeDI3OywgbmFtZTogJiN4Mjc7TGxhbWEgMy4xIDhCIChPbGxhbWEpJiN4Mjc7LCBhcGk6ICYjeDI3O29wZW5haS1jb21wbGV0aW9ucyYjeDI3OywgcHJvdmlkZXI6ICYjeDI3O29sbGFtYSYjeDI3OywgYmFzZVVybDogJiN4Mjc7aHR0cDovL2xvY2FsaG9zdDoxMTQzNC92MSYjeDI3OywgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFsmI3gyNzt0ZXh0JiN4Mjc7XSwgY29zdDogeyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfSwgY29udGV4dFdpbmRvdzogMTI4MDAwLCBtYXhUb2tlbnM6IDMyMDAwIH07IC8vIEV4YW1wbGU6IExpdGVMTE0gcHJveHkgd2l0aCBleHBsaWNpdCBjb21wYXQgc2V0dGluZ3MgY29uc3QgbGl0ZWxsbU1vZGVsOiBNb2RlbCZsdDsmI3gyNztvcGVuYWktY29tcGxldGlvbnMmI3gyNzsmZ3Q7ID0geyBpZDogJiN4Mjc7Z3B0LTRvJiN4Mjc7LCBuYW1lOiAmI3gyNztHUFQtNG8gKHZpYSBMaXRlTExNKSYjeDI3OywgYXBpOiAmI3gyNztvcGVuYWktY29tcGxldGlvblxuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWkvUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuR29vZ2xlIEdlbWluaSBDTEkgLyBBbnRpZ3Jhdml0eTogVGhlc2UgdXNlIEdvb2dsZSBDbG91ZCBPQXV0aC4gVGhlIGFwaUtleSByZXR1cm5lZCBieSBnZXRPQXV0aEFwaUtleSgpIGlzIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBib3RoIHRoZSB0b2tlbiBhbmQgcHJvamVjdCBJRCwgd2hpY2ggdGhlIGxpYnJhcnkgaGFuZGxlcyBhdXRvbWF0aWNhbGx5LlxuaW1wb3J0IHsgTW9kZWwsIHN0cmVhbSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknOyAvLyBFeGFtcGxlOiBPbGxhbWEgdXNpbmcgT3BlbkFJLWNvbXBhdGlibGUgQVBJIGNvbnN0IG9sbGFtYU1vZGVsOiBNb2RlbDwnb3BlbmFpLWNvbXBsZXRpb25zJz4gPSB7IGlkOiAnbGxhbWEtMy4xLThiJywgbmFtZTogJ0xsYW1hIDMuMSA4QiAoT2xsYW1hKScsIGFwaTogJ29wZW5haS1jb21wbGV0aW9ucycsIHByb3ZpZGVyOiAnb2xsYW1hJywgYmFzZVVybDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MTE0MzQvdjEnLCByZWFzb25pbmc6IGZhbHNlLCBpbnB1dDogWyd0ZXh0J10sIGNvc3Q6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCwgY2FjaGVSZWFkOiAwLCBjYWNoZVdyaXRlOiAwIH0sIGNvbnRleHRXaW5kb3c6IDEyODAwMCwgbWF4VG9rZW5zOiAzMjAwMCB9OyAvLyBFeGFtcGxlOiBMaXRlTExNIHByb3h5IHdpdGggZXhwbGljaXQgY29tcGF0IHNldHRpbmdzIGNvbnN0IGxpdGVsbG1Nb2RlbDogTW9kZWw8J29wZW5haS1jb21wbGV0aW9ucyc+ID0geyBpZDogJ2dwdC00bycsIG5hbWU6ICdHUFQtNG8gKHZpYSBMaXRlTExNKScsIGFwaTogJ29wZW5haS1jb21wbGV0aW9uXG5pbXBvcnQgeyBnZXRNb2RlbCwgY29tcGxldGUgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJzsgLy8gQVBJIGtleSBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5IGluIGJyb3dzZXIgY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnYW50aHJvcGljJywgJ2NsYXVkZS0zLTUtaGFpa3UtMjAyNDEwMjInKTsgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgeyBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnSGVsbG8hJyB9XSB9LCB7IGFwaUtleTogJ3lvdXItYXBpLWtleScgfSk7IiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9haS9SRUFETUUubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvYWkvUkVBRE1FLm1kIn0seyJjb250ZW50IjoiQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJmFtcDsgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBiYWRsb2dpYy9waS1tb25vXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ubyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6IlJlbGVhc2VzIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3JlbGVhc2VzIn0seyJjb250ZW50IjoiQ3VzdG9tIHByb3ZpZGVycyB2aWEgcGkucmVnaXN0ZXJQcm92aWRlcigpIGZvciBwcm94aWVzLCBjdXN0b20gZW5kcG9pbnRzLCBPQXV0aCBvciBTU08gZmxvd3MsIGFuZCBub24tc3RhbmRhcmQgc3RyZWFtaW5nIEFQSXMuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvQ0hBTkdFTE9HLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuQ3VzdG9tIHByb3ZpZGVycyB2aWEgcGkucmVnaXN0ZXJQcm92aWRlcigpIGZvciBwcm94aWVzLCBjdXN0b20gZW5kcG9pbnRzLCBPQXV0aCBvciBTU08gZmxvd3MsIGFuZCBub24tc3RhbmRhcmQgc3RyZWFtaW5nIEFQSXMuXG5JbXByb3ZlZCBlcnJvciBtZXNzYWdlczogQmV0dGVyIGVycm9yIG1lc3NhZ2VzIHdoZW4gYXBpS2V5IG9yIG1vZGVsIGFyZSBtaXNzaW5nLlxuRml4ZWQgT3BlbkFJIENvZGV4IFJlc3BvbnNlcyBwcm92aWRlciB0byByZXNwZWN0IGNvbmZpZ3VyZWQgYmFzZVVybCAoIzEyNDQpIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvQ0hBTkdFTE9HLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9DSEFOR0VMT0cubWQifSx7ImNvbnRlbnQiOiJpbXBvcnQgeyBNb2RlbCwgc3RyZWFtIH0gZnJvbSAmI3gyNztAbWFyaW96ZWNobmVyL3BpLWFpJiN4Mjc7OyAvLyBFeGFtcGxlOiBPbGxhbWEgdXNpbmcgT3BlbkFJLWNvbXBhdGlibGUgQVBJIGNvbnN0IG9sbGFtYU1vZGVsOiBNb2RlbCZsdDsmI3gyNztvcGVuYWktY29tcGxldGlvbnMmI3gyNzsmZ3Q7ID0geyBpZDogJiN4Mjc7bGxhbWEtMy4xLThiJiN4Mjc7LCBuYW1lOiAmI3gyNztMbGFtYSAzLjEgOEIgKE9sbGFtYSkmI3gyNzssIGFwaTogJiN4Mjc7b3BlbmFpLWNvbXBsZXRpb25zJiN4Mjc7LCBwcm92aWRlcjogJiN4Mjc7b2xsYW1hJiN4Mjc7LCBiYXNlVXJsOiAmI3gyNztodHRwOi8vbG9jYWxob3N0OjExNDM0L3YxJiN4Mjc7LCByZWFzb25pbmc6IGZhbHNlLCBpbnB1dDogWyYjeDI3O3RleHQmI3gyNztdLCBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LCBjb250ZXh0V2luZG93OiAxMjgwMDAsIG1heFRva2VuczogMzIwMDAgfTsgLy8gRXhhbXBsZTogTGl0ZUxMTSBwcm94eSB3aXRoIGV4cGxpY2l0IGNvbXBhdCBzZXR0aW5ncyBjb25zdCBsaXRlbGxtTW9kZWw6IE1vZGVsJmx0OyYjeDI3O29wZW5haS1jb21wbGV0aW9ucyYjeDI3OyZndDsgPSB7IGlkOiAmI3gyNztncHQtNG8mI3gyNzssIG5hbWU6ICYjeDI3O0dQVC00byAodmlhIExpdGVMTE0pJiN4Mjc7LCBhcGk6ICYjeDI3O29wZW5haS1jb21wbGV0aW9uXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9haSBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cbkdvb2dsZSBHZW1pbmkgQ0xJIC8gQW50aWdyYXZpdHk6IFRoZXNlIHVzZSBHb29nbGUgQ2xvdWQgT0F1dGguIFRoZSBhcGlLZXkgcmV0dXJuZWQgYnkgZ2V0T0F1dGhBcGlLZXkoKSBpcyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgYm90aCB0aGUgdG9rZW4gYW5kIHByb2plY3QgSUQsIHdoaWNoIHRoZSBsaWJyYXJ5IGhhbmRsZXMgYXV0b21hdGljYWxseS5cbmltcG9ydCB7IE1vZGVsLCBzdHJlYW0gfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJzsgLy8gRXhhbXBsZTogT2xsYW1hIHVzaW5nIE9wZW5BSS1jb21wYXRpYmxlIEFQSSBjb25zdCBvbGxhbWFNb2RlbDogTW9kZWw8J29wZW5haS1jb21wbGV0aW9ucyc+ID0geyBpZDogJ2xsYW1hLTMuMS04YicsIG5hbWU6ICdMbGFtYSAzLjEgOEIgKE9sbGFtYSknLCBhcGk6ICdvcGVuYWktY29tcGxldGlvbnMnLCBwcm92aWRlcjogJ29sbGFtYScsIGJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjExNDM0L3YxJywgcmVhc29uaW5nOiBmYWxzZSwgaW5wdXQ6IFsndGV4dCddLCBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LCBjb250ZXh0V2luZG93OiAxMjgwMDAsIG1heFRva2VuczogMzIwMDAgfTsgLy8gRXhhbXBsZTogTGl0ZUxMTSBwcm94eSB3aXRoIGV4cGxpY2l0IGNvbXBhdCBzZXR0aW5ncyBjb25zdCBsaXRlbGxtTW9kZWw6IE1vZGVsPCdvcGVuYWktY29tcGxldGlvbnMnPiA9IHsgaWQ6ICdncHQtNG8nLCBuYW1lOiAnR1BULTRvICh2aWEgTGl0ZUxMTSknLCBhcGk6ICdvcGVuYWktY29tcGxldGlvblxuaW1wb3J0IHsgZ2V0TW9kZWwsIGNvbXBsZXRlIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7IC8vIEFQSSBrZXkgbXVzdCBiZSBwYXNzZWQgZXhwbGljaXRseSBpbiBicm93c2VyIGNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtMy01LWhhaWt1LTIwMjQxMDIyJyk7IGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIHsgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ0hlbGxvIScgfV0gfSwgeyBhcGlLZXk6ICd5b3VyLWFwaS1rZXknIH0pOyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvYWkgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby90cmVlL21haW4vcGFja2FnZXMvYWkifSx7ImNvbnRlbnQiOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIGJhZGxvZ2ljL3BpLW1vbm9cbkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICYgd2ViIFVJIGxpYnJhcmllcywgU2xhY2sgYm90LCB2TExNIHBvZHMgLSBwaS1tb25vL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9SRUFETUUubWQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9SRUFETUUubWQifSx7ImNvbnRlbnQiOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Byb3ZpZGVycy5tZCJ9LHsiY29udGVudCI6IlRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYW4gYXJjaGl0ZWN0dXJhbCBvdmVydmlldyBvZiB0aGUgcGktbW9ubyByZXBvc2l0b3J5LCBhIG1vbm9yZXBvIGNvbnRhaW5pbmcgcGFja2FnZXMgZm9yIGJ1aWxkaW5nIEFJIGNvZGluZyBhZ2VudHMuIEl0IGRlc2NyaWJlcyB0aGUgcGFja2FnZSBzdHJ1Y3R1cmUsIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcywiLCJmYXZpY29uIjoiaHR0cHM6Ly9mYXZpY29ucy5saW5rdXAuc28/ZG9tYWluPWRlZXB3aWtpLmNvbSIsIm5hbWUiOiJiYWRsb2dpYy9waS1tb25vIHwgRGVlcFdpa2kiLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZGVlcHdpa2kuY29tL2JhZGxvZ2ljL3BpLW1vbm8ifSx7ImNvbnRlbnQiOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmYW1wOyB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIEFjdGl2aXR5IMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJmYXZpY29uIjoiaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9mYXZpY29ucy9mYXZpY29uLnN2ZyIsIm5hbWUiOiJBY3Rpdml0eSDCtyBiYWRsb2dpYy9waS1tb25vIiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9hY3Rpdml0eSJ9LHsiY29udGVudCI6IlRoZSBhZ2VudCByZWFkcyB0aGUgUkVBRE1FIHdoZW4gaXQgbmVlZHMgdGhlIHRvb2wsIHBheXMgdGhlIHRva2VuIGNvc3Qgb25seSB3aGVuIG5lY2Vzc2FyeSAocHJvZ3Jlc3NpdmUgZGlzY2xvc3VyZSksIGFuZCBjYW4gdXNlIGJhc2ggdG8gaW52b2tlIHRoZSB0b29sLiBUaGlzIGFwcHJvYWNoIGlzIGNvbXBvc2FibGUgKHBpcGUgb3V0cHV0cywgY2hhaW4gY29tbWFuZHMpLCBlYXN5IHRvIGV4dGVuZCAoanVzdCBhZGQgYW5vdGhlciBzY3JpcHQpLCBhbmQgdG9rZW4tZWZmaWNpZW50LiAuLi4gSSBtYWludGFpbiBhIGNvbGxlY3Rpb24gb2YgdGhlc2UgdG9vbHMgYXQgZ2l0aHViLmNvbS9iYWRsb2dpYy9hZ2VudC10b29scy5cblRoZSBhZ2VudCByZWFkcyB0aGUgUkVBRE1FIHdoZW4gaXQgbmVlZHMgdGhlIHRvb2wsIHBheXMgdGhlIHRva2VuIGNvc3Qgb25seSB3aGVuIG5lY2Vzc2FyeSAocHJvZ3Jlc3NpdmUgZGlzY2xvc3VyZSksIGFuZCBjYW4gdXNlIGJhc2ggdG8gaW52b2tlIHRoZSB0b29sLiBUaGlzIGFwcHJvYWNoIGlzIGNvbXBvc2FibGUgKHBpcGUgb3V0cHV0cywgY2hhaW4gY29tbWFuZHMpLCBlYXN5IHRvIGV4dGVuZCAoanVzdCBhZGQgYW5vdGhlciBzY3JpcHQpLCBhbmQgdG9rZW4tZWZmaWNpZW50LiAuLi4gSSBtYWludGFpbiBhIGNvbGxlY3Rpb24gb2YgdGhlc2UgdG9vbHMgYXQgZ2l0aHViLmNvbS9iYWRsb2dpYy9hZ2VudC10b29scy5cbkp1c3QgbG9vayBhdCB0aGUgcGktbW9ubyBpc3N1ZSB0cmFja2VyIGFuZCB0aGUgcHVsbCByZXF1ZXN0cy4gTWFueSBnZXQgY2xvc2VkIG9yIHJldmlzZWQgYmVjYXVzZSB0aGUgYWdlbnRzIGNvdWxkbid0IGZ1bGx5IGdyYXNwIHdoYXQncyBuZWVkZWQuIFRoYXQncyBub3QgdGhlIGZhdWx0IG9mIHRoZSBjb250cmlidXRvcnMsIHdoaWNoIEkgdHJ1bHkgYXBwcmVjaWF0ZSBiZWNhdXNlIGV2ZW4gaW5jb21wbGV0ZSBQUnMgaGVscCBtZSBtb3ZlIGZhc3Rlci5cblRvIGVuc3VyZSBhbGwgZmVhdHVyZXMgYWN0dWFsbHkgd29yayBhY3Jvc3MgdGhlIGdhemlsbGlvbiBvZiBwcm92aWRlcnMsIHBpLWFpIGhhcyBhIHByZXR0eSBleHRlbnNpdmUgdGVzdCBzdWl0ZSBjb3ZlcmluZyBpbWFnZSBpbnB1dHMsIHJlYXNvbmluZyB0cmFjZXMsIHRvb2wgY2FsbGluZywgYW5kIG90aGVyIGZlYXR1cmVzIHlvdSdkIGV4cGVjdCBmcm9tIGFuIExMTSBBUEkuIFRlc3RzIHJ1biBhY3Jvc3MgYWxsIHN1cHBvcnRlZCBwcm92aWRlcnMgYW5kIHBvcHVsYXIgbW9kZWxzLlxuU29tZSByZXBvcnQgdG9rZW4gY291bnRzIGF0IHRoZSBzdGFydCBvZiB0aGUgU1NFIHN0cmVhbSwgb3RoZXJzIG9ubHkgYXQgdGhlIGVuZCwgbWFraW5nIGFjY3VyYXRlIGNvc3QgdHJhY2tpbmcgaW1wb3NzaWJsZSBpZiBhIHJlcXVlc3QgaXMgYWJvcnRlZC4gVG8gYWRkIGluc3VsdCB0byBpbmp1cnksIHlvdSBjYW4ndCBwcm92aWRlIGEgdW5pcXVlIElEIHRvIGxhdGVyIGNvcnJlbGF0ZSB3aXRoIHRoZWlyIGJpbGxpbmcgQVBJcyBhbmQgZmlndXJlIG91dCB3aGljaCBvZiB5b3VyIHVzZXJzIGNvbnN1bWVkIGhvdyBtYW55IHRva2Vucy4gU28gcGktYWkgZG9lcyB0b2tlbiBhbmQgY2FjaGUgdHJhY2tpbmcgb24gYSBiZXN0LWVmZm9ydCBiYXNpcy4iLCJmYXZpY29uIjoiaHR0cHM6Ly9mYXZpY29ucy5saW5rdXAuc28/ZG9tYWluPW1hcmlvemVjaG5lci5hdCIsIm5hbWUiOiJXaGF0IEkgbGVhcm5lZCBidWlsZGluZyBhbiBvcGluaW9uYXRlZCBhbmQgbWluaW1hbCBjb2RpbmcgYWdlbnQiLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vbWFyaW96ZWNobmVyLmF0L3Bvc3RzLzIwMjUtMTEtMzAtcGktY29kaW5nLWFnZW50LyJ9LHsiY29udGVudCI6IiQgcGkgaW5zdGFsbCBucG06QGZvby9waS10b29scyAkIHBpIGluc3RhbGwgZ2l0OmdpdGh1Yi5jb20vYmFkbG9naWMvcGktZG9vbVxuJCBwaSBpbnN0YWxsIG5wbTpAZm9vL3BpLXRvb2xzICQgcGkgaW5zdGFsbCBnaXQ6Z2l0aHViLmNvbS9iYWRsb2dpYy9waS1kb29tXG5BIHRlcm1pbmFsLWJhc2VkIGNvZGluZyBhZ2VudCIsImZhdmljb24iOiJodHRwczovL2Zhdmljb25zLmxpbmt1cC5zbz9kb21haW49c2hpdHR5Y29kaW5nYWdlbnQuYWkiLCJuYW1lIjoicGkuZGV2IiwidHlwZSI6InRleHQiLCJ1cmwiOiJodHRwczovL3NoaXR0eWNvZGluZ2FnZW50LmFpLyJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vUkVBRE1FLm1kIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL1JFQURNRS5tZCJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3RyZWUvbWFpbi9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcyJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzIGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vdHJlZS9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9leGFtcGxlcyJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvYWdlbnQgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcy9hZ2VudCBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3RyZWUvbWFpbi9wYWNrYWdlcy9hZ2VudCJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50IGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsImZhdmljb24iOiJodHRwczovL2dpdGh1Yi5naXRodWJhc3NldHMuY29tL2Zhdmljb25zL2Zhdmljb24uc3ZnIiwibmFtZSI6InBpLW1vbm8vcGFja2FnZXMvY29kaW5nLWFnZW50IGF0IG1haW4gwrcgYmFkbG9naWMvcGktbW9ubyIsInR5cGUiOiJ0ZXh0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vdHJlZS9tYWluL3BhY2thZ2VzL2NvZGluZy1hZ2VudCJ9LHsiY29udGVudCI6IkFJIGFnZW50IHRvb2xraXQ6IGNvZGluZyBhZ2VudCBDTEksIHVuaWZpZWQgTExNIEFQSSwgVFVJICZhbXA7IHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gYmFkbG9naWMvcGktbW9ub1xuQUkgYWdlbnQgdG9vbGtpdDogY29kaW5nIGFnZW50IENMSSwgdW5pZmllZCBMTE0gQVBJLCBUVUkgJiB3ZWIgVUkgbGlicmFyaWVzLCBTbGFjayBib3QsIHZMTE0gcG9kcyAtIHBpLW1vbm8vcGFja2FnZXMgYXQgbWFpbiDCtyBiYWRsb2dpYy9waS1tb25vIiwiZmF2aWNvbiI6Imh0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vZmF2aWNvbnMvZmF2aWNvbi5zdmciLCJuYW1lIjoicGktbW9uby9wYWNrYWdlcyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm8iLCJ0eXBlIjoidGV4dCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL3RyZWUvbWFpbi9wYWNrYWdlcyJ9XSwicXVlcnkiOiJiYWRsb2dpYy9waS1tb25vIHJlZ2lzdGVyUHJvdmlkZXIgc2ltcGxlIG92ZXJsb2FkIGJhc2VVcmwgYXBpS2V5IiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDczMjg4OTksImVuZGVkQXQiOjE3NzEzNDczMzA2MDcsImR1cmF0aW9uTXMiOjE3MDh9fX19LCJlbmRlZEF0IjoxNzcxMzQ3MzMwNjA4LCJkdXJhdGlvbk1zIjoxNzA2fV0sInJlc3BvbnNlIjoiQmFzZWQgb24gbXkgc2VhcmNoIG9mIHRoZSBiYWRsb2dpYy9waS1tb25vIHJlcG9zaXRvcnksIGhlcmUncyB0aGUgY29tcGxldGUgYHJlZ2lzdGVyUHJvdmlkZXJgIG1ldGhvZCBzaWduYXR1cmUgb24gYEV4dGVuc2lvbkFQSWAgd2l0aCBhbGwgaXRzIGRldGFpbHM6XG5cbiMjIGByZWdpc3RlclByb3ZpZGVyYCBNZXRob2QgU2lnbmF0dXJlXG5cbioqTG9jYXRpb246KiogW3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9leHRlbnNpb25zL3R5cGVzLnRzXShodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iL21haW4vcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL2V4dGVuc2lvbnMvdHlwZXMudHMpXG5cbiMjIyBNZXRob2QgRGVmaW5pdGlvblxuYGBgdHlwZXNjcmlwdFxucmVnaXN0ZXJQcm92aWRlcihuYW1lOiBzdHJpbmcsIGNvbmZpZzogUHJvdmlkZXJDb25maWcpOiB2b2lkO1xuYGBgXG5cbiMjIyBDb25maWcgU3RydWN0dXJlXG5cblRoZSBgUHJvdmlkZXJDb25maWdgIGludGVyZmFjZSBzdXBwb3J0cyBhbGwgdGhlIHNjZW5hcmlvcyB5b3UgbWVudGlvbmVkOlxuXG5gYGB0eXBlc2NyaXB0XG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyQ29uZmlnIHtcblx0LyoqIEJhc2UgVVJMIGZvciB0aGUgQVBJIGVuZHBvaW50LiBSZXF1aXJlZCB3aGVuIGRlZmluaW5nIG1vZGVscy4gKi9cblx0YmFzZVVybD86IHN0cmluZztcblx0LyoqIEFQSSBrZXkgb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS4gUmVxdWlyZWQgd2hlbiBkZWZpbmluZyBtb2RlbHMgKHVubGVzcyBvYXV0aCBwcm92aWRlZCkuICovXG5cdGFwaUtleT86IHN0cmluZztcblx0LyoqIEFQSSB0eXBlLiBSZXF1aXJlZCBhdCBwcm92aWRlciBvciBtb2RlbCBsZXZlbCB3aGVuIGRlZmluaW5nIG1vZGVscy4gKi9cblx0YXBpPzogQXBpO1xuXHQvKiogT3B0aW9uYWwgc3RyZWFtU2ltcGxlIGhhbmRsZXIgZm9yIGN1c3RvbSBBUElzLiAqL1xuXHRzdHJlYW1TaW1wbGU/OiAobW9kZWw6IE1vZGVsPEFwaT4sIGNvbnRleHQ6IENvbnRleHQsIG9wdGlvbnM/OiBTaW1wbGVTdHJlYW1PcHRpb25zKSA9PiBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW07XG5cdC8qKiBDdXN0b20gaGVhZGVycyB0byBpbmNsdWRlIGluIHJlcXVlc3RzLiAqL1xuXHRoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqIElmIHRydWUsIGFkZHMgQXV0aG9yaXphdGlvbjogQmVhcmVyIGhlYWRlciB3aXRoIHRoZSByZXNvbHZlZCBBUEkga2V5LiAqL1xuXHRhdXRoSGVhZGVyPzogYm9vbGVhbjtcblx0LyoqIE1vZGVscyB0byByZWdpc3Rlci4gSWYgcHJvdmlkZWQsIHJlcGxhY2VzIGFsbCBleGlzdGluZyBtb2RlbHMgZm9yIHRoaXMgcHJvdmlkZXIuICovXG5cdG1vZGVscz86IFByb3ZpZGVyTW9kZWxDb25maWdbXTtcblx0LyoqIE9BdXRoIHByb3ZpZGVyIGZvciAvbG9naW4gc3VwcG9ydC4gVGhlIGBpZGAgaXMgc2V0IGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcHJvdmlkZXIgbmFtZS4gKi9cblx0b2F1dGg/OiB7IC8qIC4uLiAqLyB9O1xufVxuYGBgXG5cbiMjIyBVc2FnZSBFeGFtcGxlc1xuXG5UaGUgKipzaW1wbGUgb3ZlcmxvYWQgeW91IGFza2VkIGZvcioqICh3aXRoIGp1c3QgYGJhc2VVcmxgIGFuZCBgYXBpS2V5YCk6XG5cbmBgYHR5cGVzY3JpcHRcbi8vIE92ZXJyaWRlIGJhc2VVcmwgZm9yIGFuIGV4aXN0aW5nIHByb3ZpZGVyXG5waS5yZWdpc3RlclByb3ZpZGVyKFwiYW50aHJvcGljXCIsIHtcbiAgYmFzZVVybDogXCJodHRwczovL3Byb3h5LmV4YW1wbGUuY29tXCJcbn0pO1xuYGBgXG5cbioqRnVsbCBwcm92aWRlciByZWdpc3RyYXRpb24qKiB3aXRoIG1vZGVsczpcbmBgYHR5cGVzY3JpcHRcbnBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJteS1wcm94eVwiLCB7XG4gIGJhc2VVcmw6IFwiaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbVwiLFxuICBhcGlLZXk6IFwiUFJPWFlfQVBJX0tFWVwiLFxuICBhcGk6IFwiYW50aHJvcGljLW1lc3NhZ2VzXCIsXG4gIG1vZGVsczogW1xuICAgIHtcbiAgICAgIGlkOiBcImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNFwiLFxuICAgICAgbmFtZTogXCJDbGF1ZGUgNCBTb25uZXQgKHByb3h5KVwiLFxuICAgICAgcmVhc29uaW5nOiBmYWxzZSxcbiAgICAgIGlucHV0OiBbXCJ0ZXh0XCIsIFwiaW1hZ2VcIl0sXG4gICAgICBjb3N0OiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LFxuICAgICAgY29udGV4dFdpbmRvdzogMjAwMDAwLFxuICAgICAgbWF4VG9rZW5zOiAxNjM4NFxuICAgIH1cbiAgXVxufSk7XG5gYGBcblxuKipXaXRoIE9BdXRoIHN1cHBvcnQqKjpcbmBgYHR5cGVzY3JpcHRcbnBpLnJlZ2lzdGVyUHJvdmlkZXIoXCJjb3Jwb3JhdGUtYWlcIiwge1xuICBiYXNlVXJsOiBcImh0dHBzOi8vYWkuY29ycC5jb21cIixcbiAgYXBpOiBcIm9wZW5haS1yZXNwb25zZXNcIixcbiAgbW9kZWxzOiBbLi4uXSxcbiAgb2F1dGg6IHtcbiAgICBuYW1lOiBcIkNvcnBvcmF0ZSBBSSAoU1NPKVwiLFxuICAgIGFzeW5jIGxvZ2luKGNhbGxiYWNrcykgeyAvKiAuLi4gKi8gfSxcbiAgICBhc3luYyByZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpIHsgLyogLi4uICovIH0sXG4gICAgZ2V0QXBpS2V5KGNyZWRlbnRpYWxzKSB7IHJldHVybiBjcmVkZW50aWFscy5hY2Nlc3M7IH1cbiAgfVxufSk7XG5gYGBcblxuVGhlIG1ldGhvZCBpcyBub3QgdHJ1bHkgXCJvdmVybG9hZGVkXCIgaW4gdGhlIFR5cGVTY3JpcHQgc2Vuc2UsIGJ1dCByYXRoZXIgdXNlcyBhIGZsZXhpYmxlIGBQcm92aWRlckNvbmZpZ2AgaW50ZXJmYWNlIHdoZXJlOlxuLSBJZiBgbW9kZWxzYCBpcyBwcm92aWRlZDogcmVwbGFjZXMgYWxsIGV4aXN0aW5nIG1vZGVscyBmb3IgdGhlIHByb3ZpZGVyXG4tIElmIG9ubHkgYGJhc2VVcmxgIGlzIHByb3ZpZGVkOiBvdmVycmlkZXMgdGhlIFVSTCBmb3IgZXhpc3RpbmcgbW9kZWxzIChzaW1wbGUgY2FzZSlcbi0gQWRkaXRpb25hbCBvcHRpb25zIGxpa2UgYG9hdXRoYCBhbmQgYHN0cmVhbVNpbXBsZWAgZW5hYmxlIGFkdmFuY2VkIHNjZW5hcmlvcyIsInVzYWdlIjp7ImlucHV0VG9rZW5zIjo0NTg2Miwib3V0cHV0VG9rZW5zIjoxMjA3LCJjYWNoZVJlYWRUb2tlbnMiOjg5MTcsImNhY2hlV3JpdGVUb2tlbnMiOjAsImVzdGltYXRlZFRva2VucyI6NTU5ODYsImxsbUNvc3QiOjAuMDUyNzg4NywidG9vbENvc3QiOjAsInRvdGFsQ29zdCI6MC4wNTI3ODg3fSwicmVzb2x2ZWRNb2RlbCI6eyJwcm92aWRlciI6Im9wZW5yb3V0ZXIiLCJpZCI6ImFudGhyb3BpYy9jbGF1ZGUtaGFpa3UtNC41In0sInRvdGFsRHVyYXRpb25NcyI6MjE5NjJ9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzcxMzQ3MzM5NzI3fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMTYxYWM3NWUiLCJwYXJlbnRJZCI6IjVkOWRmOGQ1IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1NjowMi4yNjlaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiR29vZC4gTm93IEkgaGF2ZSBhbGwgdGhlIGNvbnRleHQuIEhlcmUncyB0aGUgcGxhbjpcblxuLS0tXG5cbiMjIEltcGxlbWVudGF0aW9uIFBsYW5cblxuIyMjIE92ZXJ2aWV3XG5cbkV4dGVuc2lvbiB0aGF0IHByb3hpZXMgUGkncyBMTE0gcHJvdmlkZXJzIHRocm91Z2ggVGFpbHNjYWxlIEFwZXJ0dXJlLiBBcGVydHVyZSBhY3RzIGFzIGFuIEFJIGdhdGV3YXkgb24geW91ciB0YWlsbmV0IC0tIGl0IGluamVjdHMgQVBJIGtleXMgc2VydmVyLXNpZGUgYW5kIHJvdXRlcyByZXF1ZXN0cyBieSBtb2RlbC4gVGhlIGV4dGVuc2lvbiBvdmVycmlkZXMgdGhlIGBiYXNlVXJsYCBhbmQgYGFwaUtleWAgZm9yIHNlbGVjdGVkIHByb3ZpZGVycyBzbyBhbGwgcmVxdWVzdHMgZ28gdGhyb3VnaCBBcGVydHVyZSBpbnN0ZWFkIG9mIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlciBBUElzLlxuXG4jIyMgQ29uZmlnIFNjaGVtYVxuXG5gYGB0eXBlc2NyaXB0XG4vLyBzcmMvY29uZmlnLnRzXG5pbnRlcmZhY2UgQXBlcnR1cmVDb25maWcge1xuICBiYXNlVXJsPzogc3RyaW5nOyAgICAgICAgICAvLyBlLmcuIFwiaHR0cDovL2FpLnBhbmdvLWxpbi50cy5uZXRcIlxuICBwcm92aWRlcnM/OiBzdHJpbmdbXTsgICAgICAvLyBlLmcuIFtcIm9wZW5yb3V0ZXJcIiwgXCJhbnRocm9waWNcIiwgXCJvcGVuYWlcIl1cbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkQ29uZmlnIHtcbiAgYmFzZVVybDogc3RyaW5nOyAgICAgICAgICAgLy8gZGVmYXVsdHMgdG8gXCJcIlxuICBwcm92aWRlcnM6IHN0cmluZ1tdOyAgICAgICAvLyBkZWZhdWx0cyB0byBbXVxufVxuYGBgXG5cbkNvbmZpZyBuYW1lOiBgYXBlcnR1cmVgIChyZWFkcyBmcm9tIGB+Ly5waS9hZ2VudC9leHRlbnNpb25zL2FwZXJ0dXJlLmpzb25gKS5cblxuIyMjIFByb3ZpZGVyIFJlZ2lzdHJhdGlvblxuXG5PbiBsb2FkLCBmb3IgZWFjaCBwcm92aWRlciBpbiBgY29uZmlnLnByb3ZpZGVyc2AsIGNhbGw6XG5cbmBgYHR5cGVzY3JpcHRcbnBpLnJlZ2lzdGVyUHJvdmlkZXIocHJvdmlkZXJOYW1lLCB7XG4gIGJhc2VVcmw6IGAke2NvbmZpZy5iYXNlVXJsfS92MWAsXG4gIGFwaUtleTogXCItXCIsXG59KTtcbmBgYFxuXG5UaGlzIG92ZXJyaWRlcyB0aGUgYmFzZSBVUkwgZm9yIGV4aXN0aW5nIHByb3ZpZGVycy4gQXBlcnR1cmUgaWdub3JlcyBjbGllbnQtcHJvdmlkZWQgQVBJIGtleXMgKGl0IGluamVjdHMgaXRzIG93biksIHNvIHdlIHBhc3MgYFwiLVwiYCBhcyBhIGR1bW15IGtleS4gVGhlIGAvdjFgIHN1ZmZpeCBpcyBhcHBlbmRlZCBiZWNhdXNlIEFwZXJ0dXJlIGV4cG9zZXMgT3BlbkFJLWNvbXBhdGlibGUgZW5kcG9pbnRzIGF0IGAvdjEvLi4uYC5cblxuIyMjIENvbW1hbmQ6IGBhcGVydHVyZTpzZXR1cGBcblxuSW50ZXJhY3RpdmUgd2l6YXJkOlxuXG4xLiAqKklucHV0Kio6IGFzayBmb3IgQXBlcnR1cmUgYmFzZSBVUkwuIFBsYWNlaG9sZGVyOiBgYWkucGFuZ28tbGluLnRzLm5ldGAuIFVzZXMgYElucHV0YCBjb21wb25lbnQuXG4yLiAqKkZ1enp5U2VsZWN0b3IqKjogcGljayBwcm92aWRlcnMgdG8gcm91dGUgdGhyb3VnaCBBcGVydHVyZS4gTXVsdGktc3RlcDogYWZ0ZXIgc2VsZWN0aW5nIG9uZSwgYXNrIGlmIHRoZXkgd2FudCB0byBhZGQgYW5vdGhlci4gVXNlcyBgRnV6enlTZWxlY3RvcmAgZnJvbSBgQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzYC5cbjMuICoqU2F2ZSoqOiB3cml0ZSBjb25maWcgdG8gZ2xvYmFsIHNjb3BlIGFuZCByZWdpc3RlciBwcm92aWRlcnMgaW1tZWRpYXRlbHkuXG5cbktub3duIHByb3ZpZGVyIGxpc3QgKGhhcmRjb2RlZCwgbWF0Y2hpbmcgUGkncyBidWlsdC1pbiBwcm92aWRlcnMpOiBgYW50aHJvcGljYCwgYG9wZW5haWAsIGBvcGVucm91dGVyYCwgYGdvb2dsZWAsIGB4YWlgLCBgZ3JvcWAsIGBjZXJlYnJhc2AsIGBtaXN0cmFsYCwgYGh1Z2dpbmdmYWNlYC5cblxuIyMjIENvbW1hbmQ6IGBhcGVydHVyZTpzZXR0aW5nc2BcblxuVXNlcyBgcmVnaXN0ZXJTZXR0aW5nc0NvbW1hbmRgIGZyb20gYEBhbGlvdS9waS11dGlscy1zZXR0aW5nc2Agd2l0aDpcblxuLSAqKlNlY3Rpb24gXCJDb25uZWN0aW9uXCIqKjogYmFzZSBVUkwgYXMgYW4gZWRpdGFibGUgc3RyaW5nIGZpZWxkLlxuLSAqKlNlY3Rpb24gXCJQcm92aWRlcnNcIioqOiBwcm92aWRlciBsaXN0IGFzIGFuIGBBcnJheUVkaXRvcmAgc3VibWVudSBzaG93aW5nIGN1cnJlbnQgcHJvdmlkZXJzLlxuXG4jIyMgRmlsZSBTdHJ1Y3R1cmVcblxuYGBgXG5zcmMvXG4gIGluZGV4LnRzICAgICAgICAgICAjIGVudHJ5IHBvaW50OiBsb2FkIGNvbmZpZywgcmVnaXN0ZXIgcHJvdmlkZXJzICsgY29tbWFuZHNcbiAgY29uZmlnLnRzICAgICAgICAgICMgQXBlcnR1cmVDb25maWcsIFJlc29sdmVkQ29uZmlnLCBjb25maWdMb2FkZXIsIEtOT1dOX1BST1ZJREVSU1xuICBjb21tYW5kcy9cbiAgICBzZXR1cC50cyAgICAgICAgICMgYXBlcnR1cmU6c2V0dXAgd2l6YXJkXG4gICAgc2V0dGluZ3MudHMgICAgICAjIGFwZXJ0dXJlOnNldHRpbmdzIHVzaW5nIHJlZ2lzdGVyU2V0dGluZ3NDb21tYW5kXG5gYGBcblxuIyMjIFVucmVzb2x2ZWQgUXVlc3Rpb25zXG5cbjEuIFNob3VsZCB0aGUgYGFwZXJ0dXJlOnNldHVwYCB3aXphcmQgc3VwcG9ydCBzZWxlY3RpbmcgbXVsdGlwbGUgcHJvdmlkZXJzIGF0IG9uY2UgKG11bHRpLXNlbGVjdCBpbiBGdXp6eVNlbGVjdG9yKSwgb3Igc2hvdWxkIGl0IGxvb3AgYXNraW5nIFwiYWRkIGFub3RoZXI/XCIgYWZ0ZXIgZWFjaCBzZWxlY3Rpb24/IFRoZSBgRnV6enlTZWxlY3RvcmAgY29tcG9uZW50IGlzIHNpbmdsZS1zZWxlY3QsIHNvIHRoZSBsb29wIGFwcHJvYWNoIGlzIHNpbXBsZXIuXG4yLiBTaG91bGQgd2UgcHJlcGVuZCBgaHR0cDovL2AgYXV0b21hdGljYWxseSBpZiB0aGUgdXNlciBkb2Vzbid0IGluY2x1ZGUgYSBwcm90b2NvbCBpbiB0aGUgYmFzZSBVUkw/IEFwZXJ0dXJlIGRvY3Mgc2F5IHRvIHVzZSBIVFRQIChXaXJlR3VhcmQgaGFuZGxlcyBlbmNyeXB0aW9uKS5cbjMuIEdsb2JhbC1vbmx5IGNvbmZpZyBzY29wZSwgb3IgYWxzbyBzdXBwb3J0IGxvY2FsIChwZXItcHJvamVjdCk/IEknbSBsZWFuaW5nIGdsb2JhbC1vbmx5IHNpbmNlIEFwZXJ0dXJlIGlzIGEgbmV0d29yay1sZXZlbCBjb25jZXJuLCBub3QgcHJvamVjdC1zcGVjaWZpYy4ifV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0Ijo4NTAsImNhY2hlUmVhZCI6NDA5NjksImNhY2hlV3JpdGUiOjEwNjEsInRvdGFsVG9rZW5zIjo0Mjg4MSwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMjEyNSwiY2FjaGVSZWFkIjowLjAyMDQ4NDUsImNhY2hlV3JpdGUiOjAuMDA2NjMxMjUsInRvdGFsIjowLjA0ODM3MDc1fX0sInN0b3BSZWFzb24iOiJzdG9wIiwidGltZXN0YW1wIjoxNzcxMzQ3MzM5NzMwfX0seyJ0eXBlIjoiY3VzdG9tIiwiY3VzdG9tVHlwZSI6ImFkOnRlcm1pbmFsLXRpdGxlIiwiZGF0YSI6eyJ0aXRsZSI6Is+AOiBwaS10cy1hcGVydHVyZSJ9LCJpZCI6IjdhNzRjYWEyIiwicGFyZW50SWQiOiIxNjFhYzc1ZSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTY6MDIuMjY5WiJ9LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHRoaW5raW5nLi4uKSJ9LCJpZCI6IjAwNTcxZDNlIiwicGFyZW50SWQiOiI3YTc0Y2FhMiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTg6MTguMDAxWiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjJkYzg4ODg3IiwicGFyZW50SWQiOiIwMDU3MWQzZSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTg6MTguMDAzWiIsIm1lc3NhZ2UiOnsicm9sZSI6InVzZXIiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJmb3IgdGhlIHByb3ZpZGVlciBsaXN0LCBkb24ndCBoYXJkY29kZSBpdC4gY2FuIGl0IGJlIHJldHJpZXZlZCBmcm9tIGVpdGhlciBAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudCBvciAgQG1hcmlvemVjaG5lci9waS1haSA/IHRoZXJlJ3MgYWxzbyBhIHdheSB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvdmlkZXJzIGZyb20gdGhlIHNkaywgZmFsbGJhY2sgdG8gdGhhdCBpZiB0aGVyZSBpc24ndCBhIGRlZmluaXRpdmUgbGlzdCBpbiBlaXRoZXIgcGFja2FnZXNcblxuMS4gbXVsdGkgc2VsZWN0XG4yLiB5ZXNcbjMuIGdsb2JhbCBvbmx5IGZvciBub3cifV0sInRpbWVzdGFtcCI6MTc3MTM0NzQ5Nzk5OX19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHNjb3V0KSJ9LCJpZCI6IjI4ZTJhZTg1IiwicGFyZW50SWQiOiIyZGM4ODg4NyIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTg6MjIuMjYxWiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjVmM2UyODk5IiwicGFyZW50SWQiOiIyOGUyYWU4NSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTg6MjIuMjYxWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFXQ29UVHZ0NGJtS2JkaW9qWktDTVk5IiwibmFtZSI6InNjb3V0IiwiYXJndW1lbnRzIjp7InByb21wdCI6IkZpbmQgaG93IHRvIGdldCB0aGUgbGlzdCBvZiBrbm93biBwcm92aWRlcnMgcHJvZ3JhbW1hdGljYWxseS4gTG9vayBmb3IgS25vd25Qcm92aWRlciB0eXBlLCBnZXRQcm92aWRlcnMsIGxpc3RQcm92aWRlcnMsIG9yIGFueSBleHBvcnRlZCBhcnJheS9lbnVtIG9mIHByb3ZpZGVyIG5hbWVzLiIsInJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicXVlcnkiOiJLbm93blByb3ZpZGVyIGxpc3QgcHJvdmlkZXJzIGV4cG9ydCB0eXBlIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjozLCJvdXRwdXQiOjEzNiwiY2FjaGVSZWFkIjo0MjAzMCwiY2FjaGVXcml0ZSI6OTM4LCJ0b3RhbFRva2VucyI6NDMxMDcsImNvc3QiOnsiaW5wdXQiOjAuMDAwMDE1MDAwMDAwMDAwMDAwMDAyLCJvdXRwdXQiOjAuMDAzNDAwMDAwMDAwMDAwMDAwMiwiY2FjaGVSZWFkIjowLjAyMTAxNSwiY2FjaGVXcml0ZSI6MC4wMDU4NjI1MDAwMDAwMDAwMDA1LCJ0b3RhbCI6MC4wMzAyOTI1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3NDk4MDAyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMGYwMzhlMDYiLCJwYXJlbnRJZCI6IjVmM2UyODk5IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1ODo1NC45MzlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMVdDb1RUdnQ0Ym1LYmRpb2paS0NNWTkiLCJ0b29sTmFtZSI6InNjb3V0IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiUGVyZmVjdCEgTm93IEkgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZC4gTGV0IG1lIGNvbXBpbGUgYSBjb21wcmVoZW5zaXZlIGFuc3dlci5cblxuIyMgU3VtbWFyeVxuXG5JJ3ZlIGZvdW5kIHRoZSBjb21wbGV0ZSBzb2x1dGlvbiBmb3IgZ2V0dGluZyB0aGUgbGlzdCBvZiBrbm93biBwcm92aWRlcnMgcHJvZ3JhbW1hdGljYWxseSBpbiB0aGUgYmFkbG9naWMvcGktbW9ubyByZXBvc2l0b3J5LiBIZXJlJ3Mgd2hhdCB5b3UgbmVlZCB0byBrbm93OlxuXG4jIyMgKipNYWluIEZ1bmN0aW9uOiBgZ2V0UHJvdmlkZXJzKClgKipcblxuVGhlIHByaW1hcnkgd2F5IHRvIGdldCB0aGUgbGlzdCBvZiBrbm93biBwcm92aWRlcnMgaXMgdGhyb3VnaCB0aGUgKipgZ2V0UHJvdmlkZXJzKClgKiogZnVuY3Rpb24gZXhwb3J0ZWQgZnJvbSB0aGUgYEBtYXJpb3plY2huZXIvcGktYWlgIHBhY2thZ2UuXG5cbioqTG9jYXRpb24qKjogW2BwYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzYF0oaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMudHMpXG5cbmBgYHR5cGVzY3JpcHRcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlcnMoKTogS25vd25Qcm92aWRlcltdIHtcblx0cmV0dXJuIEFycmF5LmZyb20obW9kZWxSZWdpc3RyeS5rZXlzKCkpIGFzIEtub3duUHJvdmlkZXJbXTtcbn1cbmBgYFxuXG4jIyMgKipFeHBvcnQgUGF0aCoqXG5cblRoZSBmdW5jdGlvbiBpcyBleHBvcnRlZCB0aHJvdWdoIHRoZSBtYWluIHBhY2thZ2UgZW50cnkgcG9pbnQ6XG4tICoqRmlsZSoqOiBbYHBhY2thZ2VzL2FpL3NyYy9pbmRleC50c2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvaW5kZXgudHMpXG4tICoqRXhwb3J0Kio6IGBleHBvcnQgKiBmcm9tIFwiLi9tb2RlbHMuanNcImBcblxuIyMjICoqSW1wb3J0IFVzYWdlKipcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0UHJvdmlkZXJzIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIEdldCBhbGwgYXZhaWxhYmxlIHByb3ZpZGVyc1xuY29uc3QgcHJvdmlkZXJzID0gZ2V0UHJvdmlkZXJzKCk7XG5jb25zb2xlLmxvZyhwcm92aWRlcnMpOyBcbi8vIFsnb3BlbmFpJywgJ2FudGhyb3BpYycsICdnb29nbGUnLCAneGFpJywgJ2dyb3EnLCAuLi5dXG5gYGBcblxuIyMjICoqS25vd25Qcm92aWRlciBUeXBlKipcblxuQWxsIHBvc3NpYmxlIHByb3ZpZGVyIG5hbWVzIGFyZSBkZWZpbmVkIGluIHRoZSBgS25vd25Qcm92aWRlcmAgdW5pb24gdHlwZSBpbiBbYHBhY2thZ2VzL2FpL3NyYy90eXBlcy50c2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvdHlwZXMudHMpOlxuXG5gYGB0eXBlc2NyaXB0XG5leHBvcnQgdHlwZSBLbm93blByb3ZpZGVyID1cblx0fCBcImFtYXpvbi1iZWRyb2NrXCJcblx0fCBcImFudGhyb3BpY1wiXG5cdHwgXCJnb29nbGVcIlxuXHR8IFwiZ29vZ2xlLWdlbWluaS1jbGlcIlxuXHR8IFwiZ29vZ2xlLWFudGlncmF2aXR5XCJcblx0fCBcImdvb2dsZS12ZXJ0ZXhcIlxuXHR8IFwib3BlbmFpXCJcblx0fCBcImF6dXJlLW9wZW5haS1yZXNwb25zZXNcIlxuXHR8IFwib3BlbmFpLWNvZGV4XCJcblx0fCBcImdpdGh1Yi1jb3BpbG90XCJcblx0fCBcInhhaVwiXG5cdHwgXCJncm9xXCJcblx0fCBcImNlcmVicmFzXCJcblx0fCBcIm9wZW5yb3V0ZXJcIlxuXHR8IFwidmVyY2VsLWFpLWdhdGV3YXlcIlxuXHR8IFwiemFpXCJcblx0fCBcIm1pc3RyYWxcIlxuXHR8IFwibWluaW1heFwiXG5cdHwgXCJtaW5pbWF4LWNuXCJcblx0fCBcImh1Z2dpbmdmYWNlXCJcblx0fCBcIm9wZW5jb2RlXCJcblx0fCBcImtpbWktY29kaW5nXCI7XG5gYGBcblxuIyMjICoqUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5UaGUgbGlicmFyeSBhbHNvIHByb3ZpZGVzIGNvbXBhbmlvbiBmdW5jdGlvbnMgdG8gcXVlcnkgcHJvdmlkZXJzIGFuZCBtb2RlbHM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldFByb3ZpZGVycywgZ2V0TW9kZWxzLCBnZXRNb2RlbCB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBHZXQgYWxsIHByb3ZpZGVyc1xuY29uc3QgcHJvdmlkZXJzID0gZ2V0UHJvdmlkZXJzKCk7XG5cbi8vIEdldCBhbGwgbW9kZWxzIGZyb20gYSBzcGVjaWZpYyBwcm92aWRlciAoZnVsbHkgdHlwZWQpXG5jb25zdCBhbnRocm9waWNNb2RlbHMgPSBnZXRNb2RlbHMoJ2FudGhyb3BpYycpO1xuZm9yIChjb25zdCBtb2RlbCBvZiBhbnRocm9waWNNb2RlbHMpIHtcbiAgY29uc29sZS5sb2coYCR7bW9kZWwuaWR9OiAke21vZGVsLm5hbWV9YCk7XG4gIGNvbnNvbGUubG9nKGAgIENvbnRleHQ6ICR7bW9kZWwuY29udGV4dFdpbmRvd30gdG9rZW5zYCk7XG4gIGNvbnNvbGUubG9nKGAgIFN1cHBvcnRzIHJlYXNvbmluZzogJHttb2RlbC5yZWFzb25pbmd9YCk7XG59XG5cbi8vIEdldCBhIHNwZWNpZmljIG1vZGVsXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcbmBgYFxuXG4jIyMgKipIb3cgSXQgV29ya3MgSW50ZXJuYWxseSoqXG5cblRoZSBgZ2V0UHJvdmlkZXJzKClgIGZ1bmN0aW9uIHJldHVybnMgZGF0YSBmcm9tIHRoZSBgbW9kZWxSZWdpc3RyeWAgbWFwLCB3aGljaCBpcyBpbml0aWFsaXplZCBhdCBtb2R1bGUgbG9hZCB0aW1lIGZyb20gYE1PREVMU2AgY29uc3RhbnQgKGdlbmVyYXRlZCBmcm9tIGBtb2RlbHMuZ2VuZXJhdGVkLnRzYCkuIFRoaXMgZW5zdXJlcyB0aGUgbGlzdCBpcyBkeW5hbWljIGFuZCByZWZsZWN0cyB0aGUgYWN0dWFsIGF2YWlsYWJsZSBwcm92aWRlcnMgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi5cblxuLS0tXG5cbioqU291cmNlKio6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzIn1dLCJkZXRhaWxzIjp7Il9yZW5kZXJLZXkiOiJ0b29sdV8wMVdDb1RUdnQ0Ym1LYmRpb2paS0NNWTkiLCJxdWVyeSI6Iktub3duUHJvdmlkZXIgbGlzdCBwcm92aWRlcnMgZXhwb3J0IHR5cGUiLCJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsInByb21wdCI6IkZpbmQgaG93IHRvIGdldCB0aGUgbGlzdCBvZiBrbm93biBwcm92aWRlcnMgcHJvZ3JhbW1hdGljYWxseS4gTG9vayBmb3IgS25vd25Qcm92aWRlciB0eXBlLCBnZXRQcm92aWRlcnMsIGxpc3RQcm92aWRlcnMsIG9yIGFueSBleHBvcnRlZCBhcnJheS9lbnVtIG9mIHByb3ZpZGVyIG5hbWVzLiIsInNraWxsc1Jlc29sdmVkIjowLCJ0b29sQ2FsbHMiOlt7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxOHJlbVFCb3hGcjVIZHF1b0FHN0FKUCIsInRvb2xOYW1lIjoiZ2l0aHViX3NlYXJjaCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJxdWVyeSI6Iktub3duUHJvdmlkZXIifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzUwNDkwNiwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgQ29kZSBTZWFyY2ggUmVzdWx0c1xuXG4qKlF1ZXJ5OioqIGBLbm93blByb3ZpZGVyYFxuKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbioqVG90YWwgUmVzdWx0czoqKiAxMFxuXG4jIyBSZXN1bHRzXG5cbiMjIyBwYWNrYWdlcy9haS9zcmMvdHlwZXMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzXG5cbiMjIyBwYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMudHNcblxuIyMjIEFHRU5UUy5tZFxuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9BR0VOVFMubWRcblxuIyMjIHBhY2thZ2VzL2FpL3NyYy9lbnYtYXBpLWtleXMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvc3JjL2Vudi1hcGkta2V5cy50c1xuXG4jIyMgcGFja2FnZXMvYWkvUkVBRE1FLm1kXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2FpL1JFQURNRS5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL21vZGVsLXJlc29sdmVyLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZXNvbHZlci50c1xuXG4jIyMgcGFja2FnZXMvYWkvc2NyaXB0cy9nZW5lcmF0ZS1tb2RlbHMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvc2NyaXB0cy9nZW5lcmF0ZS1tb2RlbHMudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvbW9kZWwtcmVnaXN0cnkudHNcblxuIyMjIHBhY2thZ2VzL3dlYi11aS9zcmMvZGlhbG9ncy9Nb2RlbFNlbGVjdG9yLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL3dlYi11aS9zcmMvZGlhbG9ncy9Nb2RlbFNlbGVjdG9yLnRzXG5cbiMjIyBwYWNrYWdlcy93ZWItdWkvc3JjL2RpYWxvZ3MvUHJvdmlkZXJzTW9kZWxzVGFiLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL3dlYi11aS9zcmMvZGlhbG9ncy9Qcm92aWRlcnNNb2RlbHNUYWIudHNcblxuIn1dLCJkZXRhaWxzIjp7InF1ZXJ5IjoiS25vd25Qcm92aWRlciIsInJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDc1MDQ5MDMsImVuZGVkQXQiOjE3NzEzNDc1MDUzNzEsImR1cmF0aW9uTXMiOjQ2OH19fX0sImVuZGVkQXQiOjE3NzEzNDc1MDUzNzMsImR1cmF0aW9uTXMiOjQ2N30seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMURjRFpvWDl6dnFyMTlrUzNRYzdQbmUiLCJ0b29sTmFtZSI6ImdpdGh1Yl9zZWFyY2giLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicXVlcnkiOiJnZXRQcm92aWRlcnMgbGlzdFByb3ZpZGVycyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3NTA1MzczLCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBDb2RlIFNlYXJjaCBSZXN1bHRzXG5cbioqUXVlcnk6KiogYGdldFByb3ZpZGVycyBsaXN0UHJvdmlkZXJzYFxuKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbioqVG90YWwgUmVzdWx0czoqKiAwXG5cbl9ObyBjb2RlIG1hdGNoaW5nIHRoZSBxdWVyeSB3YXMgZm91bmQuX1xuIn1dLCJkZXRhaWxzIjp7InF1ZXJ5IjoiZ2V0UHJvdmlkZXJzIGxpc3RQcm92aWRlcnMiLCJyZXBvIjoiYmFkbG9naWMvcGktbW9ubyIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3NTA1MzcyLCJlbmRlZEF0IjoxNzcxMzQ3NTA1ODcwLCJkdXJhdGlvbk1zIjo0OTh9fX19LCJlbmRlZEF0IjoxNzcxMzQ3NTA1ODcxLCJkdXJhdGlvbk1zIjo0OTh9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFMNTFtaEI0MTFkZ0dIck1EQzRCZ0MzIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8ifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzUwNTg3MiwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgYmFkbG9naWMvcGktbW9ub1xuXG5BSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzXG5cbiMjIFJlcG9zaXRvcnkgSW5mb1xuXG4tICoqU3RhcnM6KiogMTMwOTFcbi0gKipGb3JrczoqKiAxMzE0XG4tICoqTGFuZ3VhZ2U6KiogVHlwZVNjcmlwdFxuLSAqKkxpY2Vuc2U6KiogTUlUIExpY2Vuc2Vcbi0gKipEZWZhdWx0IEJyYW5jaDoqKiBtYWluXG4tICoqT3BlbiBJc3N1ZXM6KiogN1xuXG4jIyBSRUFETUVcblxuIyDwn4+W77iPIE9TUyBWYWNhdGlvblxuXG4qKklzc3VlIHRyYWNrZXIgYW5kIFBScyByZW9wZW4gRmVicnVhcnkgMjMsIDIwMjYuKipcblxuQWxsIFBScyB3aWxsIGJlIGF1dG8tY2xvc2VkIHVudGlsIHRoZW4uIEFwcHJvdmVkIGNvbnRyaWJ1dG9ycyBjYW4gc3VibWl0IFBScyBhZnRlciB2YWNhdGlvbiB3aXRob3V0IHJlYXBwcm92YWwuIEZvciBzdXBwb3J0LCBqb2luIFtEaXNjb3JkXShodHRwczovL2Rpc2NvcmQuY29tL2ludml0ZS8zY1U3Qno0VVB4KS5cblxuLS0tXG5cbjxwIGFsaWduPVwiY2VudGVyXCI+XG4gIDxhIGhyZWY9XCJodHRwczovL3NoaXR0eWNvZGluZ2FnZW50LmFpXCI+XG4gICAgPGltZyBzcmM9XCJodHRwczovL3NoaXR0eWNvZGluZ2FnZW50LmFpL2xvZ28uc3ZnXCIgYWx0PVwicGkgbG9nb1wiIHdpZHRoPVwiMTI4XCI+XG4gIDwvYT5cbjwvcD5cbjxwIGFsaWduPVwiY2VudGVyXCI+XG4gIDxhIGhyZWY9XCJodHRwczovL2Rpc2NvcmQuY29tL2ludml0ZS8zY1U3Qno0VVB4XCI+PGltZyBhbHQ9XCJEaXNjb3JkXCIgc3JjPVwiaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9kaXNjb3JkLWNvbW11bml0eS01ODY1RjI/c3R5bGU9ZmxhdC1zcXVhcmUmbG9nbz1kaXNjb3JkJmxvZ29Db2xvcj13aGl0ZVwiIC8+PC9hPlxuICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYWN0aW9ucy93b3JrZmxvd3MvY2kueW1sXCI+PGltZyBhbHQ9XCJCdWlsZCBzdGF0dXNcIiBzcmM9XCJodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9hY3Rpb25zL3dvcmtmbG93L3N0YXR1cy9iYWRsb2dpYy9waS1tb25vL2NpLnltbD9zdHlsZT1mbGF0LXNxdWFyZSZicmFuY2g9bWFpblwiIC8+PC9hPlxuPC9wPlxuPHAgYWxpZ249XCJjZW50ZXJcIj5cbiAgPGEgaHJlZj1cImh0dHBzOi8vcGkuZGV2XCI+cGkuZGV2PC9hPiBkb21haW4gZ3JhY2lvdXNseSBkb25hdGVkIGJ5XG4gIDxiciAvPjxiciAvPlxuICA8YSBocmVmPVwiaHR0cHM6Ly9leGUuZGV2XCI+PGltZyBzcmM9XCJwYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9pbWFnZXMvZXh5LnBuZ1wiIGFsdD1cIkV4eSBtYXNjb3RcIiB3aWR0aD1cIjQ4XCIgLz48YnIgLz5leGUuZGV2PC9hPlxuPC9wPlxuXG4jIFBpIE1vbm9yZXBvXG5cbj4gKipMb29raW5nIGZvciB0aGUgcGkgY29kaW5nIGFnZW50PyoqIFNlZSAqKltwYWNrYWdlcy9jb2RpbmctYWdlbnRdKHBhY2thZ2VzL2NvZGluZy1hZ2VudCkqKiBmb3IgaW5zdGFsbGF0aW9uIGFuZCB1c2FnZS5cblxuVG9vbHMgZm9yIGJ1aWxkaW5nIEFJIGFnZW50cyBhbmQgbWFuYWdpbmcgTExNIGRlcGxveW1lbnRzLlxuXG4jIyBQYWNrYWdlc1xuXG58IFBhY2thZ2UgfCBEZXNjcmlwdGlvbiB8XG58LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18XG58ICoqW0BtYXJpb3plY2huZXIvcGktYWldKHBhY2thZ2VzL2FpKSoqIHwgVW5pZmllZCBtdWx0aS1wcm92aWRlciBMTE0gQVBJIChPcGVuQUksIEFudGhyb3BpYywgR29vZ2xlLCBldGMuKSB8XG58ICoqW0BtYXJpb3plY2huZXIvcGktYWdlbnQtY29yZV0ocGFja2FnZXMvYWdlbnQpKiogfCBBZ2VudCBydW50aW1lIHdpdGggdG9vbCBjYWxsaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IHxcbnwgKipbQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRdKHBhY2thZ2VzL2NvZGluZy1hZ2VudCkqKiB8IEludGVyYWN0aXZlIGNvZGluZyBhZ2VudCBDTEkgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLW1vbV0ocGFja2FnZXMvbW9tKSoqIHwgU2xhY2sgYm90IHRoYXQgZGVsZWdhdGVzIG1lc3NhZ2VzIHRvIHRoZSBwaSBjb2RpbmcgYWdlbnQgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLXR1aV0ocGFja2FnZXMvdHVpKSoqIHwgVGVybWluYWwgVUkgbGlicmFyeSB3aXRoIGRpZmZlcmVudGlhbCByZW5kZXJpbmcgfFxufCAqKltAbWFyaW96ZWNobmVyL3BpLXdlYi11aV0ocGFja2FnZXMvd2ViLXVpKSoqIHwgV2ViIGNvbXBvbmVudHMgZm9yIEFJIGNoYXQgaW50ZXJmYWNlcyB8XG58ICoqW0BtYXJpb3plY2huZXIvcGktcG9kc10ocGFja2FnZXMvcG9kcykqKiB8IENMSSBmb3IgbWFuYWdpbmcgdkxMTSBkZXBsb3ltZW50cyBvbiBHUFUgcG9kcyB8XG5cbiMjIENvbnRyaWJ1dGluZ1xuXG5TZWUgW0NPTlRSSUJVVElORy5tZF0oQ09OVFJJQlVUSU5HLm1kKSBmb3IgY29udHJpYnV0aW9uIGd1aWRlbGluZXMgYW5kIFtBR0VOVFMubWRdKEFHRU5UUy5tZCkgZm9yIHByb2plY3Qtc3BlY2lmaWMgcnVsZXMgKGZvciBib3RoIGh1bWFucyBhbmQgYWdlbnRzKS5cblxuIyMgRGV2ZWxvcG1lbnRcblxuYGBgYmFzaFxubnBtIGluc3RhbGwgICAgICAgICAgIyBJbnN0YWxsIGFsbCBkZXBlbmRlbmNpZXNcbm5wbSBydW4gYnVpbGQgICAgICAgICMgQnVpbGQgYWxsIHBhY2thZ2VzXG5ucG0gcnVuIGNoZWNrICAgICAgICAjIExpbnQsIGZvcm1hdCwgYW5kIHR5cGUgY2hlY2tcbi4vdGVzdC5zaCAgICAgICAgICAgICMgUnVuIHRlc3RzIChza2lwcyBMTE0tZGVwZW5kZW50IHRlc3RzIHdpdGhvdXQgQVBJIGtleXMpXG4uL3BpLXRlc3Quc2ggICAgICAgICAjIFJ1biBwaSBmcm9tIHNvdXJjZXMgKG11c3QgYmUgcnVuIGZyb20gcmVwbyByb290KVxuYGBgXG5cbj4gKipOb3RlOioqIGBucG0gcnVuIGNoZWNrYCByZXF1aXJlcyBgbnBtIHJ1biBidWlsZGAgdG8gYmUgcnVuIGZpcnN0LiBUaGUgd2ViLXVpIHBhY2thZ2UgdXNlcyBgdHNjYCB3aGljaCBuZWVkcyBjb21waWxlZCBgLmQudHNgIGZpbGVzIGZyb20gZGVwZW5kZW5jaWVzLlxuXG4jIyBMaWNlbnNlXG5cbk1JVFxuIyMgUmVwb3NpdG9yeSBTdHJ1Y3R1cmVcblxuLSBbZF0gLmdpdGh1YlxuLSBbZl0gLmdpdGlnbm9yZVxuLSBbZF0gLmh1c2t5XG4tIFtkXSAucGlcbi0gW2ZdIEFHRU5UUy5tZFxuLSBbZl0gQ09OVFJJQlVUSU5HLm1kXG4tIFtmXSBMSUNFTlNFXG4tIFtmXSBSRUFETUUubWRcbi0gW2ZdIGJpb21lLmpzb25cbi0gW2ZdIHBhY2thZ2UtbG9jay5qc29uXG4tIFtmXSBwYWNrYWdlLmpzb25cbi0gW2RdIHBhY2thZ2VzXG4tIFtmXSBwaS1tb25vLmNvZGUtd29ya3NwYWNlXG4tIFtmXSBwaS10ZXN0LnNoXG4tIFtkXSBzY3JpcHRzXG4tIFtmXSB0ZXN0LnNoXG4tIFtmXSB0c2NvbmZpZy5iYXNlLmpzb25cbi0gW2ZdIHRzY29uZmlnLmpzb25cbiJ9XSwiZGV0YWlscyI6eyJvd25lciI6ImJhZGxvZ2ljIiwicmVwbyI6InBpLW1vbm8iLCJwYXRoIjpudWxsLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoicmVwbyIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3NTA1ODcwLCJlbmRlZEF0IjoxNzcxMzQ3NTA2NTk0LCJkdXJhdGlvbk1zIjo3MjR9fX19LCJlbmRlZEF0IjoxNzcxMzQ3NTA2NTk0LCJkdXJhdGlvbk1zIjo3MjJ9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDE4M3FKN0NIN1czZXdTdW91ZWppbmlkIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDc1MTA2MzIsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIHR5cGVzLnRzXG5cbioqUGF0aDoqKiBgcGFja2FnZXMvYWkvc3JjL3R5cGVzLnRzYFxuKipTaXplOioqIDEwNTg4IGJ5dGVzXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB0eXBlIHsgQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtIH0gZnJvbSBcIi4vdXRpbHMvZXZlbnQtc3RyZWFtLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtIH0gZnJvbSBcIi4vdXRpbHMvZXZlbnQtc3RyZWFtLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEtub3duQXBpID1cblx0fCBcIm9wZW5haS1jb21wbGV0aW9uc1wiXG5cdHwgXCJvcGVuYWktcmVzcG9uc2VzXCJcblx0fCBcImF6dXJlLW9wZW5haS1yZXNwb25zZXNcIlxuXHR8IFwib3BlbmFpLWNvZGV4LXJlc3BvbnNlc1wiXG5cdHwgXCJhbnRocm9waWMtbWVzc2FnZXNcIlxuXHR8IFwiYmVkcm9jay1jb252ZXJzZS1zdHJlYW1cIlxuXHR8IFwiZ29vZ2xlLWdlbmVyYXRpdmUtYWlcIlxuXHR8IFwiZ29vZ2xlLWdlbWluaS1jbGlcIlxuXHR8IFwiZ29vZ2xlLXZlcnRleFwiO1xuXG5leHBvcnQgdHlwZSBBcGkgPSBLbm93bkFwaSB8IChzdHJpbmcgJiB7fSk7XG5cbmV4cG9ydCB0eXBlIEtub3duUHJvdmlkZXIgPVxuXHR8IFwiYW1hem9uLWJlZHJvY2tcIlxuXHR8IFwiYW50aHJvcGljXCJcblx0fCBcImdvb2dsZVwiXG5cdHwgXCJnb29nbGUtZ2VtaW5pLWNsaVwiXG5cdHwgXCJnb29nbGUtYW50aWdyYXZpdHlcIlxuXHR8IFwiZ29vZ2xlLXZlcnRleFwiXG5cdHwgXCJvcGVuYWlcIlxuXHR8IFwiYXp1cmUtb3BlbmFpLXJlc3BvbnNlc1wiXG5cdHwgXCJvcGVuYWktY29kZXhcIlxuXHR8IFwiZ2l0aHViLWNvcGlsb3RcIlxuXHR8IFwieGFpXCJcblx0fCBcImdyb3FcIlxuXHR8IFwiY2VyZWJyYXNcIlxuXHR8IFwib3BlbnJvdXRlclwiXG5cdHwgXCJ2ZXJjZWwtYWktZ2F0ZXdheVwiXG5cdHwgXCJ6YWlcIlxuXHR8IFwibWlzdHJhbFwiXG5cdHwgXCJtaW5pbWF4XCJcblx0fCBcIm1pbmltYXgtY25cIlxuXHR8IFwiaHVnZ2luZ2ZhY2VcIlxuXHR8IFwib3BlbmNvZGVcIlxuXHR8IFwia2ltaS1jb2RpbmdcIjtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyID0gS25vd25Qcm92aWRlciB8IHN0cmluZztcblxuZXhwb3J0IHR5cGUgVGhpbmtpbmdMZXZlbCA9IFwibWluaW1hbFwiIHwgXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIiB8IFwieGhpZ2hcIjtcblxuLyoqIFRva2VuIGJ1ZGdldHMgZm9yIGVhY2ggdGhpbmtpbmcgbGV2ZWwgKHRva2VuLWJhc2VkIHByb3ZpZGVycyBvbmx5KSAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGlua2luZ0J1ZGdldHMge1xuXHRtaW5pbWFsPzogbnVtYmVyO1xuXHRsb3c/OiBudW1iZXI7XG5cdG1lZGl1bT86IG51bWJlcjtcblx0aGlnaD86IG51bWJlcjtcbn1cblxuLy8gQmFzZSBvcHRpb25zIGFsbCBwcm92aWRlcnMgc2hhcmVcbmV4cG9ydCB0eXBlIENhY2hlUmV0ZW50aW9uID0gXCJub25lXCIgfCBcInNob3J0XCIgfCBcImxvbmdcIjtcblxuZXhwb3J0IHR5cGUgVHJhbnNwb3J0ID0gXCJzc2VcIiB8IFwid2Vic29ja2V0XCIgfCBcImF1dG9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1PcHRpb25zIHtcblx0dGVtcGVyYXR1cmU/OiBudW1iZXI7XG5cdG1heFRva2Vucz86IG51bWJlcjtcblx0c2lnbmFsPzogQWJvcnRTaWduYWw7XG5cdGFwaUtleT86IHN0cmluZztcblx0LyoqXG5cdCAqIFByZWZlcnJlZCB0cmFuc3BvcnQgZm9yIHByb3ZpZGVycyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgdHJhbnNwb3J0cy5cblx0ICogUHJvdmlkZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhpcyBvcHRpb24gaWdub3JlIGl0LlxuXHQgKi9cblx0dHJhbnNwb3J0PzogVHJhbnNwb3J0O1xuXHQvKipcblx0ICogUHJvbXB0IGNhY2hlIHJldGVudGlvbiBwcmVmZXJlbmNlLiBQcm92aWRlcnMgbWFwIHRoaXMgdG8gdGhlaXIgc3VwcG9ydGVkIHZhbHVlcy5cblx0ICogRGVmYXVsdDogXCJzaG9ydFwiLlxuXHQgKi9cblx0Y2FjaGVSZXRlbnRpb24/OiBDYWNoZVJldGVudGlvbjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIHNlc3Npb24gaWRlbnRpZmllciBmb3IgcHJvdmlkZXJzIHRoYXQgc3VwcG9ydCBzZXNzaW9uLWJhc2VkIGNhY2hpbmcuXG5cdCAqIFByb3ZpZGVycyBjYW4gdXNlIHRoaXMgdG8gZW5hYmxlIHByb21wdCBjYWNoaW5nLCByZXF1ZXN0IHJvdXRpbmcsIG9yIG90aGVyXG5cdCAqIHNlc3Npb24tYXdhcmUgZmVhdHVyZXMuIElnbm9yZWQgYnkgcHJvdmlkZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdC5cblx0ICovXG5cdHNlc3Npb25JZD86IHN0cmluZztcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBpbnNwZWN0aW5nIHByb3ZpZGVyIHBheWxvYWRzIGJlZm9yZSBzZW5kaW5nLlxuXHQgKi9cblx0b25QYXlsb2FkPzogKHBheWxvYWQ6IHVua25vd24pID0+IHZvaWQ7XG5cdC8qKlxuXHQgKiBPcHRpb25hbCBjdXN0b20gSFRUUCBoZWFkZXJzIHRvIGluY2x1ZGUgaW4gQVBJIHJlcXVlc3RzLlxuXHQgKiBNZXJnZWQgd2l0aCBwcm92aWRlciBkZWZhdWx0czsgY2FuIG92ZXJyaWRlIGRlZmF1bHQgaGVhZGVycy5cblx0ICogTm90IHN1cHBvcnRlZCBieSBhbGwgcHJvdmlkZXJzIChlLmcuLCBBV1MgQmVkcm9jayB1c2VzIFNESyBhdXRoKS5cblx0ICovXG5cdGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHQvKipcblx0ICogTWF4aW11bSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgYSByZXRyeSB3aGVuIHRoZSBzZXJ2ZXIgcmVxdWVzdHMgYSBsb25nIHdhaXQuXG5cdCAqIElmIHRoZSBzZXJ2ZXIncyByZXF1ZXN0ZWQgZGVsYXkgZXhjZWVkcyB0aGlzIHZhbHVlLCB0aGUgcmVxdWVzdCBmYWlscyBpbW1lZGlhdGVseVxuXHQgKiB3aXRoIGFuIGVycm9yIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBkZWxheSwgYWxsb3dpbmcgaGlnaGVyLWxldmVsIHJldHJ5IGxvZ2ljXG5cdCAqIHRvIGhhbmRsZSBpdCB3aXRoIHVzZXIgdmlzaWJpbGl0eS5cblx0ICogRGVmYXVsdDogNjAwMDAgKDYwIHNlY29uZHMpLiBTZXQgdG8gMCB0byBkaXNhYmxlIHRoZSBjYXAuXG5cdCAqL1xuXHRtYXhSZXRyeURlbGF5TXM/OiBudW1iZXI7XG5cdC8qKlxuXHQgKiBPcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIGluIEFQSSByZXF1ZXN0cy5cblx0ICogUHJvdmlkZXJzIGV4dHJhY3QgdGhlIGZpZWxkcyB0aGV5IHVuZGVyc3RhbmQgYW5kIGlnbm9yZSB0aGUgcmVzdC5cblx0ICogRm9yIGV4YW1wbGUsIEFudGhyb3BpYyB1c2VzIGB1c2VyX2lkYCBmb3IgYWJ1c2UgdHJhY2tpbmcgYW5kIHJhdGUgbGltaXRpbmcuXG5cdCAqL1xuXHRtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgdHlwZSBQcm92aWRlclN0cmVhbU9wdGlvbnMgPSBTdHJlYW1PcHRpb25zICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8vIFVuaWZpZWQgb3B0aW9ucyB3aXRoIHJlYXNvbmluZyBwYXNzZWQgdG8gc3RyZWFtU2ltcGxlKCkgYW5kIGNvbXBsZXRlU2ltcGxlKClcbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlU3RyZWFtT3B0aW9ucyBleHRlbmRzIFN0cmVhbU9wdGlvbnMge1xuXHRyZWFzb25pbmc/OiBUaGlua2luZ0xldmVsO1xuXHQvKiogQ3VzdG9tIHRva2VuIGJ1ZGdldHMgZm9yIHRoaW5raW5nIGxldmVscyAodG9rZW4tYmFzZWQgcHJvdmlkZXJzIG9ubHkpICovXG5cdHRoaW5raW5nQnVkZ2V0cz86IFRoaW5raW5nQnVkZ2V0cztcbn1cblxuLy8gR2VuZXJpYyBTdHJlYW1GdW5jdGlvbiB3aXRoIHR5cGVkIG9wdGlvbnNcbmV4cG9ydCB0eXBlIFN0cmVhbUZ1bmN0aW9uPFRBcGkgZXh0ZW5kcyBBcGkgPSBBcGksIFRPcHRpb25zIGV4dGVuZHMgU3RyZWFtT3B0aW9ucyA9IFN0cmVhbU9wdGlvbnM+ID0gKFxuXHRtb2RlbDogTW9kZWw8VEFwaT4sXG5cdGNvbnRleHQ6IENvbnRleHQsXG5cdG9wdGlvbnM/OiBUT3B0aW9ucyxcbikgPT4gQXNzaXN0YW50TWVzc2FnZUV2ZW50U3RyZWFtO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRDb250ZW50IHtcblx0dHlwZTogXCJ0ZXh0XCI7XG5cdHRleHQ6IHN0cmluZztcblx0dGV4dFNpZ25hdHVyZT86IHN0cmluZzsgLy8gZS5nLiwgZm9yIE9wZW5BSSByZXNwb25zZXMsIHRoZSBtZXNzYWdlIElEXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhpbmtpbmdDb250ZW50IHtcblx0dHlwZTogXCJ0aGlua2luZ1wiO1xuXHR0aGlua2luZzogc3RyaW5nO1xuXHR0aGlua2luZ1NpZ25hdHVyZT86IHN0cmluZzsgLy8gZS5nLiwgZm9yIE9wZW5BSSByZXNwb25zZXMsIHRoZSByZWFzb25pbmcgaXRlbSBJRFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQ29udGVudCB7XG5cdHR5cGU6IFwiaW1hZ2VcIjtcblx0ZGF0YTogc3RyaW5nOyAvLyBiYXNlNjQgZW5jb2RlZCBpbWFnZSBkYXRhXG5cdG1pbWVUeXBlOiBzdHJpbmc7IC8vIGUuZy4sIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbENhbGwge1xuXHR0eXBlOiBcInRvb2xDYWxsXCI7XG5cdGlkOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0YXJndW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXHR0aG91Z2h0U2lnbmF0dXJlPzogc3RyaW5nOyAvLyBHb29nbGUtc3BlY2lmaWM6IG9wYXF1ZSBzaWduYXR1cmUgZm9yIHJldXNpbmcgdGhvdWdodCBjb250ZXh0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2Uge1xuXHRpbnB1dDogbnVtYmVyO1xuXHRvdXRwdXQ6IG51bWJlcjtcblx0Y2FjaGVSZWFkOiBudW1iZXI7XG5cdGNhY2hlV3JpdGU6IG51bWJlcjtcblx0dG90YWxUb2tlbnM6IG51bWJlcjtcblx0Y29zdDoge1xuXHRcdGlucHV0OiBudW1iZXI7XG5cdFx0b3V0cHV0OiBudW1iZXI7XG5cdFx0Y2FjaGVSZWFkOiBudW1iZXI7XG5cdFx0Y2FjaGVXcml0ZTogbnVtYmVyO1xuXHRcdHRvdGFsOiBudW1iZXI7XG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3BSZWFzb24gPSBcInN0b3BcIiB8IFwibGVuZ3RoXCIgfCBcInRvb2xVc2VcIiB8IFwiZXJyb3JcIiB8IFwiYWJvcnRlZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJNZXNzYWdlIHtcblx0cm9sZTogXCJ1c2VyXCI7XG5cdGNvbnRlbnQ6IHN0cmluZyB8IChUZXh0Q29udGVudCB8IEltYWdlQ29udGVudClbXTtcblx0dGltZXN0YW1wOiBudW1iZXI7IC8vIFVuaXggdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdGFudE1lc3NhZ2Uge1xuXHRyb2xlOiBcImFzc2lzdGFudFwiO1xuXHRjb250ZW50OiAoVGV4dENvbnRlbnQgfCBUaGlua2luZ0NvbnRlbnQgfCBUb29sQ2FsbClbXTtcblx0YXBpOiBBcGk7XG5cdHByb3ZpZGVyOiBQcm92aWRlcjtcblx0bW9kZWw6IHN0cmluZztcblx0dXNhZ2U6IFVzYWdlO1xuXHRzdG9wUmVhc29uOiBTdG9wUmVhc29uO1xuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cdHRpbWVzdGFtcDogbnVtYmVyOyAvLyBVbml4IHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sUmVzdWx0TWVzc2FnZTxURGV0YWlscyA9IGFueT4ge1xuXHRyb2xlOiBcInRvb2xSZXN1bHRcIjtcblx0dG9vbENhbGxJZDogc3RyaW5nO1xuXHR0b29sTmFtZTogc3RyaW5nO1xuXHRjb250ZW50OiAoVGV4dENvbnRlbnQgfCBJbWFnZUNvbnRlbnQpW107IC8vIFN1cHBvcnRzIHRleHQgYW5kIGltYWdlc1xuXHRkZXRhaWxzPzogVERldGFpbHM7XG5cdGlzRXJyb3I6IGJvb2xlYW47XG5cdHRpbWVzdGFtcDogbnVtYmVyOyAvLyBVbml4IHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFVzZXJNZXNzYWdlIHwgQXNzaXN0YW50TWVzc2FnZSB8IFRvb2xSZXN1bHRNZXNzYWdlO1xuXG5pbXBvcnQgdHlwZSB7IFRTY2hlbWEgfSBmcm9tIFwiQHNpbmNsYWlyL3R5cGVib3hcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUb29sPFRQYXJhbWV0ZXJzIGV4dGVuZHMgVFNjaGVtYSA9IFRTY2hlbWE+IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBUUGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0IHtcblx0c3lzdGVtUHJvbXB0Pzogc3RyaW5nO1xuXHRtZXNzYWdlczogTWVzc2FnZVtdO1xuXHR0b29scz86IFRvb2xbXTtcbn1cblxuZXhwb3J0IHR5cGUgQXNzaXN0YW50TWVzc2FnZUV2ZW50ID1cblx0fCB7IHR5cGU6IFwic3RhcnRcIjsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcInRleHRfc3RhcnRcIjsgY29udGVudEluZGV4OiBudW1iZXI7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJ0ZXh0X2RlbHRhXCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBkZWx0YTogc3RyaW5nOyBwYXJ0aWFsOiBBc3Npc3RhbnRNZXNzYWdlIH1cblx0fCB7IHR5cGU6IFwidGV4dF9lbmRcIjsgY29udGVudEluZGV4OiBudW1iZXI7IGNvbnRlbnQ6IHN0cmluZzsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcInRoaW5raW5nX3N0YXJ0XCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBwYXJ0aWFsOiBBc3Npc3RhbnRNZXNzYWdlIH1cblx0fCB7IHR5cGU6IFwidGhpbmtpbmdfZGVsdGFcIjsgY29udGVudEluZGV4OiBudW1iZXI7IGRlbHRhOiBzdHJpbmc7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJ0aGlua2luZ19lbmRcIjsgY29udGVudEluZGV4OiBudW1iZXI7IGNvbnRlbnQ6IHN0cmluZzsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcInRvb2xjYWxsX3N0YXJ0XCI7IGNvbnRlbnRJbmRleDogbnVtYmVyOyBwYXJ0aWFsOiBBc3Npc3RhbnRNZXNzYWdlIH1cblx0fCB7IHR5cGU6IFwidG9vbGNhbGxfZGVsdGFcIjsgY29udGVudEluZGV4OiBudW1iZXI7IGRlbHRhOiBzdHJpbmc7IHBhcnRpYWw6IEFzc2lzdGFudE1lc3NhZ2UgfVxuXHR8IHsgdHlwZTogXCJ0b29sY2FsbF9lbmRcIjsgY29udGVudEluZGV4OiBudW1iZXI7IHRvb2xDYWxsOiBUb29sQ2FsbDsgcGFydGlhbDogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcImRvbmVcIjsgcmVhc29uOiBFeHRyYWN0PFN0b3BSZWFzb24sIFwic3RvcFwiIHwgXCJsZW5ndGhcIiB8IFwidG9vbFVzZVwiPjsgbWVzc2FnZTogQXNzaXN0YW50TWVzc2FnZSB9XG5cdHwgeyB0eXBlOiBcImVycm9yXCI7IHJlYXNvbjogRXh0cmFjdDxTdG9wUmVhc29uLCBcImFib3J0ZWRcIiB8IFwiZXJyb3JcIj47IGVycm9yOiBBc3Npc3RhbnRNZXNzYWdlIH07XG5cbi8qKlxuICogQ29tcGF0aWJpbGl0eSBzZXR0aW5ncyBmb3IgT3BlbkFJLWNvbXBhdGlibGUgY29tcGxldGlvbnMgQVBJcy5cbiAqIFVzZSB0aGlzIHRvIG92ZXJyaWRlIFVSTC1iYXNlZCBhdXRvLWRldGVjdGlvbiBmb3IgY3VzdG9tIHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlDb21wbGV0aW9uc0NvbXBhdCB7XG5cdC8qKiBXaGV0aGVyIHRoZSBwcm92aWRlciBzdXBwb3J0cyB0aGUgYHN0b3JlYCBmaWVsZC4gRGVmYXVsdDogYXV0by1kZXRlY3RlZCBmcm9tIFVSTC4gKi9cblx0c3VwcG9ydHNTdG9yZT86IGJvb2xlYW47XG5cdC8qKiBXaGV0aGVyIHRoZSBwcm92aWRlciBzdXBwb3J0cyB0aGUgYGRldmVsb3BlcmAgcm9sZSAodnMgYHN5c3RlbWApLiBEZWZhdWx0OiBhdXRvLWRldGVjdGVkIGZyb20gVVJMLiAqL1xuXHRzdXBwb3J0c0RldmVsb3BlclJvbGU/OiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGUgcHJvdmlkZXIgc3VwcG9ydHMgYHJlYXNvbmluZ19lZmZvcnRgLiBEZWZhdWx0OiBhdXRvLWRldGVjdGVkIGZyb20gVVJMLiAqL1xuXHRzdXBwb3J0c1JlYXNvbmluZ0VmZm9ydD86IGJvb2xlYW47XG5cdC8qKiBXaGV0aGVyIHRoZSBwcm92aWRlciBzdXBwb3J0cyBgc3RyZWFtX29wdGlvbnM6IHsgaW5jbHVkZV91c2FnZTogdHJ1ZSB9YCBmb3IgdG9rZW4gdXNhZ2UgaW4gc3RyZWFtaW5nIHJlc3BvbnNlcy4gRGVmYXVsdDogdHJ1ZS4gKi9cblx0c3VwcG9ydHNVc2FnZUluU3RyZWFtaW5nPzogYm9vbGVhbjtcblx0LyoqIFdoaWNoIGZpZWxkIHRvIHVzZSBmb3IgbWF4IHRva2Vucy4gRGVmYXVsdDogYXV0by1kZXRlY3RlZCBmcm9tIFVSTC4gKi9cblx0bWF4VG9rZW5zRmllbGQ/OiBcIm1heF9jb21wbGV0aW9uX3Rva2Vuc1wiIHwgXCJtYXhfdG9rZW5zXCI7XG5cdC8qKiBXaGV0aGVyIHRvb2wgcmVzdWx0cyByZXF1aXJlIHRoZSBgbmFtZWAgZmllbGQuIERlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQgZnJvbSBVUkwuICovXG5cdHJlcXVpcmVzVG9vbFJlc3VsdE5hbWU/OiBib29sZWFuO1xuXHQvKiogV2hldGhlciBhIHVzZXIgbWVzc2FnZSBhZnRlciB0b29sIHJlc3VsdHMgcmVxdWlyZXMgYW4gYXNzaXN0YW50IG1lc3NhZ2UgaW4gYmV0d2Vlbi4gRGVmYXVsdDogYXV0by1kZXRlY3RlZCBmcm9tIFVSTC4gKi9cblx0cmVxdWlyZXNBc3Npc3RhbnRBZnRlclRvb2xSZXN1bHQ/OiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0aGlua2luZyBibG9ja3MgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gdGV4dCBibG9ja3Mgd2l0aCA8dGhpbmtpbmc+IGRlbGltaXRlcnMuIERlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQgZnJvbSBVUkwuICovXG5cdHJlcXVpcmVzVGhpbmtpbmdBc1RleHQ/OiBib29sZWFuO1xuXHQvKiogV2hldGhlciB0b29sIGNhbGwgSURzIG11c3QgYmUgbm9ybWFsaXplZCB0byBNaXN0cmFsIGZvcm1hdCAoZXhhY3RseSA5IGFscGhhbnVtZXJpYyBjaGFycykuIERlZmF1bHQ6IGF1dG8tZGV0ZWN0ZWQgZnJvbSBVUkwuICovXG5cdHJlcXVpcmVzTWlzdHJhbFRvb2xJZHM/OiBib29sZWFuO1xuXHQvKiogRm9ybWF0IGZvciByZWFzb25pbmcvdGhpbmtpbmcgcGFyYW1ldGVyLiBcIm9wZW5haVwiIHVzZXMgcmVhc29uaW5nX2VmZm9ydCwgXCJ6YWlcIiB1c2VzIHRoaW5raW5nOiB7IHR5cGU6IFwiZW5hYmxlZFwiIH0sIFwicXdlblwiIHVzZXMgZW5hYmxlX3RoaW5raW5nOiBib29sZWFuLiBEZWZhdWx0OiBcIm9wZW5haVwiLiAqL1xuXHR0aGlua2luZ0Zvcm1hdD86IFwib3BlbmFpXCIgfCBcInphaVwiIHwgXCJxd2VuXCI7XG5cdC8qKiBPcGVuUm91dGVyLXNwZWNpZmljIHJvdXRpbmcgcHJlZmVyZW5jZXMuIE9ubHkgdXNlZCB3aGVuIGJhc2VVcmwgcG9pbnRzIHRvIE9wZW5Sb3V0ZXIuICovXG5cdG9wZW5Sb3V0ZXJSb3V0aW5nPzogT3BlblJvdXRlclJvdXRpbmc7XG5cdC8qKiBWZXJjZWwgQUkgR2F0ZXdheSByb3V0aW5nIHByZWZlcmVuY2VzLiBPbmx5IHVzZWQgd2hlbiBiYXNlVXJsIHBvaW50cyB0byBWZXJjZWwgQUkgR2F0ZXdheS4gKi9cblx0dmVyY2VsR2F0ZXdheVJvdXRpbmc/OiBWZXJjZWxHYXRld2F5Um91dGluZztcblx0LyoqIFdoZXRoZXIgdGhlIHByb3ZpZGVyIHN1cHBvcnRzIHRoZSBgc3RyaWN0YCBmaWVsZCBpbiB0b29sIGRlZmluaXRpb25zLiBEZWZhdWx0OiB0cnVlLiAqL1xuXHRzdXBwb3J0c1N0cmljdE1vZGU/OiBib29sZWFuO1xufVxuXG4vKiogQ29tcGF0aWJpbGl0eSBzZXR0aW5ncyBmb3IgT3BlbkFJIFJlc3BvbnNlcyBBUElzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlSZXNwb25zZXNDb21wYXQge1xuXHQvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxufVxuXG4vKipcbiAqIE9wZW5Sb3V0ZXIgcHJvdmlkZXIgcm91dGluZyBwcmVmZXJlbmNlcy5cbiAqIENvbnRyb2xzIHdoaWNoIHVwc3RyZWFtIHByb3ZpZGVycyBPcGVuUm91dGVyIHJvdXRlcyByZXF1ZXN0cyB0by5cbiAqIEBzZWUgaHR0cHM6Ly9vcGVucm91dGVyLmFpL2RvY3MvcHJvdmlkZXItcm91dGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5Sb3V0ZXJSb3V0aW5nIHtcblx0LyoqIExpc3Qgb2YgcHJvdmlkZXIgc2x1Z3MgdG8gZXhjbHVzaXZlbHkgdXNlIGZvciB0aGlzIHJlcXVlc3QgKGUuZy4sIFtcImFtYXpvbi1iZWRyb2NrXCIsIFwiYW50aHJvcGljXCJdKS4gKi9cblx0b25seT86IHN0cmluZ1tdO1xuXHQvKiogTGlzdCBvZiBwcm92aWRlciBzbHVncyB0byB0cnkgaW4gb3JkZXIgKGUuZy4sIFtcImFudGhyb3BpY1wiLCBcIm9wZW5haVwiXSkuICovXG5cdG9yZGVyPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVmVyY2VsIEFJIEdhdGV3YXkgcm91dGluZyBwcmVmZXJlbmNlcy5cbiAqIENvbnRyb2xzIHdoaWNoIHVwc3RyZWFtIHByb3ZpZGVycyB0aGUgZ2F0ZXdheSByb3V0ZXMgcmVxdWVzdHMgdG8uXG4gKiBAc2VlIGh0dHBzOi8vdmVyY2VsLmNvbS9kb2NzL2FpLWdhdGV3YXkvbW9kZWxzLWFuZC1wcm92aWRlcnMvcHJvdmlkZXItb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmNlbEdhdGV3YXlSb3V0aW5nIHtcblx0LyoqIExpc3Qgb2YgcHJvdmlkZXIgc2x1Z3MgdG8gZXhjbHVzaXZlbHkgdXNlIGZvciB0aGlzIHJlcXVlc3QgKGUuZy4sIFtcImJlZHJvY2tcIiwgXCJhbnRocm9waWNcIl0pLiAqL1xuXHRvbmx5Pzogc3RyaW5nW107XG5cdC8qKiBMaXN0IG9mIHByb3ZpZGVyIHNsdWdzIHRvIHRyeSBpbiBvcmRlciAoZS5nLiwgW1wiYW50aHJvcGljXCIsIFwib3BlbmFpXCJdKS4gKi9cblx0b3JkZXI/OiBzdHJpbmdbXTtcbn1cblxuLy8gTW9kZWwgaW50ZXJmYWNlIGZvciB0aGUgdW5pZmllZCBtb2RlbCBzeXN0ZW1cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWw8VEFwaSBleHRlbmRzIEFwaT4ge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFwaTogVEFwaTtcblx0cHJvdmlkZXI6IFByb3ZpZGVyO1xuXHRiYXNlVXJsOiBzdHJpbmc7XG5cdHJlYXNvbmluZzogYm9vbGVhbjtcblx0aW5wdXQ6IChcInRleHRcIiB8IFwiaW1hZ2VcIilbXTtcblx0Y29zdDoge1xuXHRcdGlucHV0OiBudW1iZXI7IC8vICQvbWlsbGlvbiB0b2tlbnNcblx0XHRvdXRwdXQ6IG51bWJlcjsgLy8gJC9taWxsaW9uIHRva2Vuc1xuXHRcdGNhY2hlUmVhZDogbnVtYmVyOyAvLyAkL21pbGxpb24gdG9rZW5zXG5cdFx0Y2FjaGVXcml0ZTogbnVtYmVyOyAvLyAkL21pbGxpb24gdG9rZW5zXG5cdH07XG5cdGNvbnRleHRXaW5kb3c6IG51bWJlcjtcblx0bWF4VG9rZW5zOiBudW1iZXI7XG5cdGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHQvKiogQ29tcGF0aWJpbGl0eSBvdmVycmlkZXMgZm9yIE9wZW5BSS1jb21wYXRpYmxlIEFQSXMuIElmIG5vdCBzZXQsIGF1dG8tZGV0ZWN0ZWQgZnJvbSBiYXNlVXJsLiAqL1xuXHRjb21wYXQ/OiBUQXBpIGV4dGVuZHMgXCJvcGVuYWktY29tcGxldGlvbnNcIlxuXHRcdD8gT3BlbkFJQ29tcGxldGlvbnNDb21wYXRcblx0XHQ6IFRBcGkgZXh0ZW5kcyBcIm9wZW5haS1yZXNwb25zZXNcIlxuXHRcdFx0PyBPcGVuQUlSZXNwb25zZXNDb21wYXRcblx0XHRcdDogbmV2ZXI7XG59XG5cbmBgYFxuIn1dLCJkZXRhaWxzIjp7Im93bmVyIjoiYmFkbG9naWMiLCJyZXBvIjoicGktbW9ubyIsInBhdGgiOiJwYWNrYWdlcy9haS9zcmMvdHlwZXMudHMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3NTEwNjMwLCJlbmRlZEF0IjoxNzcxMzQ3NTEwODY2LCJkdXJhdGlvbk1zIjoyMzZ9fX19LCJlbmRlZEF0IjoxNzcxMzQ3NTEwODc3LCJkdXJhdGlvbk1zIjoyNDV9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFBN1g1SHZmTlZ6Q0F4U2U1TUM3OUdxIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjL21vZGVscy50cyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3NTEwODc3LCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBtb2RlbHMudHNcblxuKipQYXRoOioqIGBwYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzYFxuKipTaXplOioqIDI4NjUgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgTU9ERUxTIH0gZnJvbSBcIi4vbW9kZWxzLmdlbmVyYXRlZC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGksIEtub3duUHJvdmlkZXIsIE1vZGVsLCBVc2FnZSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmNvbnN0IG1vZGVsUmVnaXN0cnk6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE1vZGVsPEFwaT4+PiA9IG5ldyBNYXAoKTtcblxuLy8gSW5pdGlhbGl6ZSByZWdpc3RyeSBmcm9tIE1PREVMUyBvbiBtb2R1bGUgbG9hZFxuZm9yIChjb25zdCBbcHJvdmlkZXIsIG1vZGVsc10gb2YgT2JqZWN0LmVudHJpZXMoTU9ERUxTKSkge1xuXHRjb25zdCBwcm92aWRlck1vZGVscyA9IG5ldyBNYXA8c3RyaW5nLCBNb2RlbDxBcGk+PigpO1xuXHRmb3IgKGNvbnN0IFtpZCwgbW9kZWxdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVscykpIHtcblx0XHRwcm92aWRlck1vZGVscy5zZXQoaWQsIG1vZGVsIGFzIE1vZGVsPEFwaT4pO1xuXHR9XG5cdG1vZGVsUmVnaXN0cnkuc2V0KHByb3ZpZGVyLCBwcm92aWRlck1vZGVscyk7XG59XG5cbnR5cGUgTW9kZWxBcGk8XG5cdFRQcm92aWRlciBleHRlbmRzIEtub3duUHJvdmlkZXIsXG5cdFRNb2RlbElkIGV4dGVuZHMga2V5b2YgKHR5cGVvZiBNT0RFTFMpW1RQcm92aWRlcl0sXG4+ID0gKHR5cGVvZiBNT0RFTFMpW1RQcm92aWRlcl1bVE1vZGVsSWRdIGV4dGVuZHMgeyBhcGk6IGluZmVyIFRBcGkgfSA/IChUQXBpIGV4dGVuZHMgQXBpID8gVEFwaSA6IG5ldmVyKSA6IG5ldmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWw8VFByb3ZpZGVyIGV4dGVuZHMgS25vd25Qcm92aWRlciwgVE1vZGVsSWQgZXh0ZW5kcyBrZXlvZiAodHlwZW9mIE1PREVMUylbVFByb3ZpZGVyXT4oXG5cdHByb3ZpZGVyOiBUUHJvdmlkZXIsXG5cdG1vZGVsSWQ6IFRNb2RlbElkLFxuKTogTW9kZWw8TW9kZWxBcGk8VFByb3ZpZGVyLCBUTW9kZWxJZD4+IHtcblx0Y29uc3QgcHJvdmlkZXJNb2RlbHMgPSBtb2RlbFJlZ2lzdHJ5LmdldChwcm92aWRlcik7XG5cdHJldHVybiBwcm92aWRlck1vZGVscz8uZ2V0KG1vZGVsSWQgYXMgc3RyaW5nKSBhcyBNb2RlbDxNb2RlbEFwaTxUUHJvdmlkZXIsIFRNb2RlbElkPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlcnMoKTogS25vd25Qcm92aWRlcltdIHtcblx0cmV0dXJuIEFycmF5LmZyb20obW9kZWxSZWdpc3RyeS5rZXlzKCkpIGFzIEtub3duUHJvdmlkZXJbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsczxUUHJvdmlkZXIgZXh0ZW5kcyBLbm93blByb3ZpZGVyPihcblx0cHJvdmlkZXI6IFRQcm92aWRlcixcbik6IE1vZGVsPE1vZGVsQXBpPFRQcm92aWRlciwga2V5b2YgKHR5cGVvZiBNT0RFTFMpW1RQcm92aWRlcl0+PltdIHtcblx0Y29uc3QgbW9kZWxzID0gbW9kZWxSZWdpc3RyeS5nZXQocHJvdmlkZXIpO1xuXHRyZXR1cm4gbW9kZWxzID8gKEFycmF5LmZyb20obW9kZWxzLnZhbHVlcygpKSBhcyBNb2RlbDxNb2RlbEFwaTxUUHJvdmlkZXIsIGtleW9mICh0eXBlb2YgTU9ERUxTKVtUUHJvdmlkZXJdPj5bXSkgOiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvc3Q8VEFwaSBleHRlbmRzIEFwaT4obW9kZWw6IE1vZGVsPFRBcGk+LCB1c2FnZTogVXNhZ2UpOiBVc2FnZVtcImNvc3RcIl0ge1xuXHR1c2FnZS5jb3N0LmlucHV0ID0gKG1vZGVsLmNvc3QuaW5wdXQgLyAxMDAwMDAwKSAqIHVzYWdlLmlucHV0O1xuXHR1c2FnZS5jb3N0Lm91dHB1dCA9IChtb2RlbC5jb3N0Lm91dHB1dCAvIDEwMDAwMDApICogdXNhZ2Uub3V0cHV0O1xuXHR1c2FnZS5jb3N0LmNhY2hlUmVhZCA9IChtb2RlbC5jb3N0LmNhY2hlUmVhZCAvIDEwMDAwMDApICogdXNhZ2UuY2FjaGVSZWFkO1xuXHR1c2FnZS5jb3N0LmNhY2hlV3JpdGUgPSAobW9kZWwuY29zdC5jYWNoZVdyaXRlIC8gMTAwMDAwMCkgKiB1c2FnZS5jYWNoZVdyaXRlO1xuXHR1c2FnZS5jb3N0LnRvdGFsID0gdXNhZ2UuY29zdC5pbnB1dCArIHVzYWdlLmNvc3Qub3V0cHV0ICsgdXNhZ2UuY29zdC5jYWNoZVJlYWQgKyB1c2FnZS5jb3N0LmNhY2hlV3JpdGU7XG5cdHJldHVybiB1c2FnZS5jb3N0O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgbW9kZWwgc3VwcG9ydHMgeGhpZ2ggdGhpbmtpbmcgbGV2ZWwuXG4gKlxuICogU3VwcG9ydGVkIHRvZGF5OlxuICogLSBHUFQtNS4yIC8gR1BULTUuMyBtb2RlbCBmYW1pbGllc1xuICogLSBBbnRocm9waWMgTWVzc2FnZXMgQVBJIE9wdXMgNC42IG1vZGVscyAoeGhpZ2ggbWFwcyB0byBhZGFwdGl2ZSBlZmZvcnQgXCJtYXhcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzWGhpZ2g8VEFwaSBleHRlbmRzIEFwaT4obW9kZWw6IE1vZGVsPFRBcGk+KTogYm9vbGVhbiB7XG5cdGlmIChtb2RlbC5pZC5pbmNsdWRlcyhcImdwdC01LjJcIikgfHwgbW9kZWwuaWQuaW5jbHVkZXMoXCJncHQtNS4zXCIpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAobW9kZWwuYXBpID09PSBcImFudGhyb3BpYy1tZXNzYWdlc1wiKSB7XG5cdFx0cmV0dXJuIG1vZGVsLmlkLmluY2x1ZGVzKFwib3B1cy00LTZcIikgfHwgbW9kZWwuaWQuaW5jbHVkZXMoXCJvcHVzLTQuNlwiKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gbW9kZWxzIGFyZSBlcXVhbCBieSBjb21wYXJpbmcgYm90aCB0aGVpciBpZCBhbmQgcHJvdmlkZXIuXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGVpdGhlciBtb2RlbCBpcyBudWxsIG9yIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsc0FyZUVxdWFsPFRBcGkgZXh0ZW5kcyBBcGk+KFxuXHRhOiBNb2RlbDxUQXBpPiB8IG51bGwgfCB1bmRlZmluZWQsXG5cdGI6IE1vZGVsPFRBcGk+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuXHRpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIGEuaWQgPT09IGIuaWQgJiYgYS5wcm92aWRlciA9PT0gYi5wcm92aWRlcjtcbn1cblxuYGBgXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9tb2RlbHMudHMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3NTEwODY2LCJlbmRlZEF0IjoxNzcxMzQ3NTExMDkzLCJkdXJhdGlvbk1zIjoyMjd9fX19LCJlbmRlZEF0IjoxNzcxMzQ3NTExMDk0LCJkdXJhdGlvbk1zIjoyMTd9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFHVTdlbXBMZ1ZLYmVTQzhDNWJOZ1lyIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvc3JjIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDc1MTEwOTQsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIGJhZGxvZ2ljL3BpLW1vbm8vcGFja2FnZXMvYWkvc3JjXG5cbiMjIENvbnRlbnRzXG5cbi0gW2RdIHByb3ZpZGVyc1xuLSBbZF0gdXRpbHNcbi0gW2ZdIGFwaS1yZWdpc3RyeS50cyAoMjU2MyBieXRlcylcbi0gW2ZdIGNsaS50cyAoMzg2NCBieXRlcylcbi0gW2ZdIGVudi1hcGkta2V5cy50cyAoNDEwNCBieXRlcylcbi0gW2ZdIGluZGV4LnRzICg4NzkgYnl0ZXMpXG4tIFtmXSBtb2RlbHMuZ2VuZXJhdGVkLnRzICgzMTM2NTEgYnl0ZXMpXG4tIFtmXSBtb2RlbHMudHMgKDI4NjUgYnl0ZXMpXG4tIFtmXSBzdHJlYW0udHMgKDE1MTggYnl0ZXMpXG4tIFtmXSB0eXBlcy50cyAoMTA1ODggYnl0ZXMpXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYyIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJkaXJlY3RvcnkiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzUxMTA5MywiZW5kZWRBdCI6MTc3MTM0NzUxMTM5NywiZHVyYXRpb25NcyI6MzA0fX19fSwiZW5kZWRBdCI6MTc3MTM0NzUxMTM5NywiZHVyYXRpb25NcyI6MzAzfSx7InRvb2xDYWxsSWQiOiJ0b29sdV9iZHJrXzAxRERKOWhUNWYzQUNkY3p2S1pad1RhUyIsInRvb2xOYW1lIjoiZ2l0aHViX2NvbnRlbnQiLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9pbmRleC50cyJ9LCJzdGF0dXMiOiJkb25lIiwic3RhcnRlZEF0IjoxNzcxMzQ3NTEzODMwLCJyZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIyBpbmRleC50c1xuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2FpL3NyYy9pbmRleC50c2BcbioqU2l6ZToqKiA4NzkgYnl0ZXNcblxuYGBgdHlwZXNjcmlwdFxuZXhwb3J0IHR5cGUgeyBTdGF0aWMsIFRTY2hlbWEgfSBmcm9tIFwiQHNpbmNsYWlyL3R5cGVib3hcIjtcbmV4cG9ydCB7IFR5cGUgfSBmcm9tIFwiQHNpbmNsYWlyL3R5cGVib3hcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vYXBpLXJlZ2lzdHJ5LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnYtYXBpLWtleXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGVscy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJzL2FudGhyb3BpYy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJzL2F6dXJlLW9wZW5haS1yZXNwb25zZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9nb29nbGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9nb29nbGUtZ2VtaW5pLWNsaS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvdmlkZXJzL2dvb2dsZS12ZXJ0ZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9vcGVuYWktY29tcGxldGlvbnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVycy9vcGVuYWktcmVzcG9uc2VzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm92aWRlcnMvcmVnaXN0ZXItYnVpbHRpbnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2V2ZW50LXN0cmVhbS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvanNvbi1wYXJzZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvb2F1dGgvaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL292ZXJmbG93LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy90eXBlYm94LWhlbHBlcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRpb24uanNcIjtcblxuYGBgXG4ifV0sImRldGFpbHMiOnsib3duZXIiOiJiYWRsb2dpYyIsInJlcG8iOiJwaS1tb25vIiwicGF0aCI6InBhY2thZ2VzL2FpL3NyYy9pbmRleC50cyIsInJlZiI6bnVsbCwiY29udGVudFR5cGUiOiJmaWxlIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDc1MTM4MjgsImVuZGVkQXQiOjE3NzEzNDc1MTM5ODgsImR1cmF0aW9uTXMiOjE2MH19fX0sImVuZGVkQXQiOjE3NzEzNDc1MTM5ODksImR1cmF0aW9uTXMiOjE1OX0seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMTl2cjhMcHJIb0ppVVN6NmNCUHdSZVgiLCJ0b29sTmFtZSI6ImdpdGh1Yl9zZWFyY2giLCJhcmdzIjp7InJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwicXVlcnkiOiJleHBvcnQgY29uc3QgTU9ERUxTIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDc1MTYzMjQsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIENvZGUgU2VhcmNoIFJlc3VsdHNcblxuKipRdWVyeToqKiBgZXhwb3J0IGNvbnN0IE1PREVMU2BcbioqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4qKlRvdGFsIFJlc3VsdHM6KiogNzFcblxuIyMgUmVzdWx0c1xuXG4jIyMgcGFja2FnZXMvcG9kcy9zcmMvY29tbWFuZHMvbW9kZWxzLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL3BvZHMvc3JjL2NvbW1hbmRzL21vZGVscy50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jbGkvbGlzdC1tb2RlbHMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jbGkvbGlzdC1tb2RlbHMudHNcblxuIyMjIHBhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL21vZGVzL2ludGVyYWN0aXZlL2NvbXBvbmVudHMvc2NvcGVkLW1vZGVscy1zZWxlY3Rvci50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL21vZGVzL2ludGVyYWN0aXZlL2NvbXBvbmVudHMvc2NvcGVkLW1vZGVscy1zZWxlY3Rvci50c1xuXG4jIyMgcGFja2FnZXMvYWkvc2NyaXB0cy9nZW5lcmF0ZS1tb2RlbHMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvc2NyaXB0cy9nZW5lcmF0ZS1tb2RlbHMudHNcblxuIyMjIHBhY2thZ2VzL2FpL3NyYy9tb2RlbHMudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvc3JjL21vZGVscy50c1xuXG4jIyMgcGFja2FnZXMvd2ViLXVpL3NyYy9kaWFsb2dzL01vZGVsU2VsZWN0b3IudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvd2ViLXVpL3NyYy9kaWFsb2dzL01vZGVsU2VsZWN0b3IudHNcblxuIyMjIHBhY2thZ2VzL3BvZHMvc3JjL21vZGVsLWNvbmZpZ3MudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvcG9kcy9zcmMvbW9kZWwtY29uZmlncy50c1xuXG4jIyMgcGFja2FnZXMvYWkvUkVBRE1FLm1kXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2FpL1JFQURNRS5tZFxuXG4jIyMgcGFja2FnZXMvcG9kcy9zcmMvY29tbWFuZHMvcG9kcy50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9wb2RzL3NyYy9jb21tYW5kcy9wb2RzLnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9wcm92aWRlcnMubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcHJvdmlkZXJzLm1kXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9jdXN0b20tcHJvdmlkZXIubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvY3VzdG9tLXByb3ZpZGVyLm1kXG5cbiMjIyBwYWNrYWdlcy9haS9zcmMvdXRpbHMvb2F1dGgvZ2l0aHViLWNvcGlsb3QudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvc3JjL3V0aWxzL29hdXRoL2dpdGh1Yi1jb3BpbG90LnRzXG5cbiMjIyBwYWNrYWdlcy9haS9DSEFOR0VMT0cubWRcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvYWkvQ0hBTkdFTE9HLm1kXG5cbiMjIyBwYWNrYWdlcy93ZWItdWkvc3JjL3V0aWxzL21vZGVsLWRpc2NvdmVyeS50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy93ZWItdWkvc3JjL3V0aWxzL21vZGVsLWRpc2NvdmVyeS50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvcnBjLm1kXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3JwYy5tZFxuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL21vZGVsLXJlc29sdmVyLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZXNvbHZlci50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jb3JlL21vZGVsLXJlZ2lzdHJ5LnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9tb2RlbC1yZWdpc3RyeS50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2RvY3MvZXh0ZW5zaW9ucy5tZFxuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9leHRlbnNpb25zLm1kXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NsaS9hcmdzLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY2xpL2FyZ3MudHNcblxuIyMjIHBhY2thZ2VzL3dlYi11aS9zcmMvZGlhbG9ncy9Qcm92aWRlcnNNb2RlbHNUYWIudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvd2ViLXVpL3NyYy9kaWFsb2dzL1Byb3ZpZGVyc01vZGVsc1RhYi50c1xuXG4jIyMgcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWdpdGxhYi1kdW8vaW5kZXgudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvY29kaW5nLWFnZW50L2V4YW1wbGVzL2V4dGVuc2lvbnMvY3VzdG9tLXByb3ZpZGVyLWdpdGxhYi1kdW8vaW5kZXgudHNcblxuIyMjIHBhY2thZ2VzL2FpL3NyYy9wcm92aWRlcnMvZ29vZ2xlLXNoYXJlZC50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9haS9zcmMvcHJvdmlkZXJzL2dvb2dsZS1zaGFyZWQudHNcblxuIyMjIHBhY2thZ2VzL3dlYi11aS9zcmMvdXRpbHMvaTE4bi50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy93ZWItdWkvc3JjL3V0aWxzL2kxOG4udHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29uZmlnLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29uZmlnLnRzXG5cbiMjIyBwYWNrYWdlcy9wb2RzL3NyYy9jb21tYW5kcy9wcm9tcHQudHNcblxuLSAqKlJlcG9zaXRvcnk6KiogYmFkbG9naWMvcGktbW9ub1xuLSAqKlVSTDoqKiBodHRwczovL2dpdGh1Yi5jb20vYmFkbG9naWMvcGktbW9uby9ibG9iLzBhNmIwYjhmYjAzNDBkMWYyY2FhNjYxNzk1ZGQ2MzI2NTQyMDgyMDAvcGFja2FnZXMvcG9kcy9zcmMvY29tbWFuZHMvcHJvbXB0LnRzXG5cbiMjIyBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvc2RrLnRzXG5cbi0gKipSZXBvc2l0b3J5OioqIGJhZGxvZ2ljL3BpLW1vbm9cbi0gKipVUkw6KiogaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi8wYTZiMGI4ZmIwMzQwZDFmMmNhYTY2MTc5NWRkNjMyNjU0MjA4MjAwL3BhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9zZGsudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9kb2NzL3Nkay5tZFxuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvZG9jcy9zZGsubWRcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvY29yZS9zbGFzaC1jb21tYW5kcy50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NvcmUvc2xhc2gtY29tbWFuZHMudHNcblxuIyMjIHBhY2thZ2VzL2NvZGluZy1hZ2VudC9zcmMvbWFpbi50c1xuXG4tICoqUmVwb3NpdG9yeToqKiBiYWRsb2dpYy9waS1tb25vXG4tICoqVVJMOioqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvMGE2YjBiOGZiMDM0MGQxZjJjYWE2NjE3OTVkZDYzMjY1NDIwODIwMC9wYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL21haW4udHNcblxuIn1dLCJkZXRhaWxzIjp7InF1ZXJ5IjoiZXhwb3J0IGNvbnN0IE1PREVMUyIsInJlcG8iOiJiYWRsb2dpYy9waS1tb25vIiwiX19tZXRhIjp7InRpbWluZyI6eyJzdGFydGVkQXQiOjE3NzEzNDc1MTYzMjMsImVuZGVkQXQiOjE3NzEzNDc1MTcyNTUsImR1cmF0aW9uTXMiOjkzMn19fX0sImVuZGVkQXQiOjE3NzEzNDc1MTcyNTYsImR1cmF0aW9uTXMiOjkzMn0seyJ0b29sQ2FsbElkIjoidG9vbHVfYmRya18wMTNlMWhwOGdrTE1OaExTdVFVRk5mMmciLCJ0b29sTmFtZSI6Imxpbmt1cF93ZWJfZmV0Y2giLCJhcmdzIjp7InVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyIsInJlbmRlckpzIjpmYWxzZX0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDc1MjA0MTgsInBhcnRpYWxSZXN1bHQiOnsiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiRmV0Y2hpbmcgaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzLi4uIn1dLCJkZXRhaWxzIjp7fX0sInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuW1NraXAgdG8gY29udGVudF0oI3N0YXJ0LW9mLWNvbnRlbnQpXG5cbllvdSBzaWduZWQgaW4gd2l0aCBhbm90aGVyIHRhYiBvciB3aW5kb3cuIFtSZWxvYWRdKCkgdG8gcmVmcmVzaCB5b3VyIHNlc3Npb24uIFlvdSBzaWduZWQgb3V0IGluIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gWW91IHN3aXRjaGVkIGFjY291bnRzIG9uIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gRGlzbWlzcyBhbGVydFxuXG5bYmFkbG9naWNdKC9iYWRsb2dpYykgLyAqKltwaS1tb25vXSgvYmFkbG9naWMvcGktbW9ubykqKiBQdWJsaWNcblxuLSAgIFtOb3RpZmljYXRpb25zXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubykgWW91IG11c3QgYmUgc2lnbmVkIGluIHRvIGNoYW5nZSBub3RpZmljYXRpb24gc2V0dGluZ3Ncbi0gICBbRm9yayAxLjNrXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubylcbi0gICBbU3RhciAxMy4xa10oL2xvZ2luP3JldHVybl90bz0lMkZiYWRsb2dpYyUyRnBpLW1vbm8pXG4gICAgXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHMgMl0oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsbHMpXG4tICAgW0Rpc2N1c3Npb25zXSgvYmFkbG9naWMvcGktbW9uby9kaXNjdXNzaW9ucylcbi0gICBbQWN0aW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vYWN0aW9ucylcbi0gICBbUHJvamVjdHMgMF0oL2JhZGxvZ2ljL3BpLW1vbm8vcHJvamVjdHMpXG4tICAgW1NlY3VyaXR5IDBdKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbkFkZGl0aW9uYWwgbmF2aWdhdGlvbiBvcHRpb25zXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHNdKC9iYWRsb2dpYy9waS1tb25vL3B1bGxzKVxuLSAgIFtEaXNjdXNzaW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vZGlzY3Vzc2lvbnMpXG4tICAgW0FjdGlvbnNdKC9iYWRsb2dpYy9waS1tb25vL2FjdGlvbnMpXG4tICAgW1Byb2plY3RzXSgvYmFkbG9naWMvcGktbW9uby9wcm9qZWN0cylcbi0gICBbU2VjdXJpdHldKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbiMjIEZvb3RlclxuXG48aHR0cHM6Ly9naXRodWIuY29tPsKpIDIwMjYgR2l0SHViLMKgSW5jLlxuXG4jIyMgRm9vdGVyIG5hdmlnYXRpb25cblxuLSAgIFtUZXJtc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vc2l0ZS1wb2xpY3kvZ2l0aHViLXRlcm1zL2dpdGh1Yi10ZXJtcy1vZi1zZXJ2aWNlKVxuLSAgIFtQcml2YWN5XShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9zaXRlLXBvbGljeS9wcml2YWN5LXBvbGljaWVzL2dpdGh1Yi1wcml2YWN5LXN0YXRlbWVudClcbi0gICBbU2VjdXJpdHldKGh0dHBzOi8vZ2l0aHViLmNvbS9zZWN1cml0eSlcbi0gICBbU3RhdHVzXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tLylcbi0gICBbQ29tbXVuaXR5XShodHRwczovL2dpdGh1Yi5jb21tdW5pdHkvKVxuLSAgIFtEb2NzXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS8pXG4tICAgW0NvbnRhY3RdKGh0dHBzOi8vc3VwcG9ydC5naXRodWIuY29tP3RhZ3M9ZG90Y29tLWZvb3Rlcilcbi0gICBNYW5hZ2UgY29va2llc1xuLSAgIERvIG5vdCBzaGFyZSBteSBwZXJzb25hbCBpbmZvcm1hdGlvblxuXG5Zb3UgY2Fu4oCZdCBwZXJmb3JtIHRoYXQgYWN0aW9uIGF0IHRoaXMgdGltZS4ifV0sImRldGFpbHMiOnsidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMuZ2VuZXJhdGVkLnRzIiwibWFya2Rvd24iOiJBSSBhZ2VudCB0b29sa2l0OiBjb2RpbmcgYWdlbnQgQ0xJLCB1bmlmaWVkIExMTSBBUEksIFRVSSAmIHdlYiBVSSBsaWJyYXJpZXMsIFNsYWNrIGJvdCwgdkxMTSBwb2RzIC0gcGktbW9uby9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLmdlbmVyYXRlZC50cyBhdCBtYWluIMK3IGJhZGxvZ2ljL3BpLW1vbm9cblxuW1NraXAgdG8gY29udGVudF0oI3N0YXJ0LW9mLWNvbnRlbnQpXG5cbllvdSBzaWduZWQgaW4gd2l0aCBhbm90aGVyIHRhYiBvciB3aW5kb3cuIFtSZWxvYWRdKCkgdG8gcmVmcmVzaCB5b3VyIHNlc3Npb24uIFlvdSBzaWduZWQgb3V0IGluIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gWW91IHN3aXRjaGVkIGFjY291bnRzIG9uIGFub3RoZXIgdGFiIG9yIHdpbmRvdy4gW1JlbG9hZF0oKSB0byByZWZyZXNoIHlvdXIgc2Vzc2lvbi4gRGlzbWlzcyBhbGVydFxuXG5bYmFkbG9naWNdKC9iYWRsb2dpYykgLyAqKltwaS1tb25vXSgvYmFkbG9naWMvcGktbW9ubykqKiBQdWJsaWNcblxuLSAgIFtOb3RpZmljYXRpb25zXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubykgWW91IG11c3QgYmUgc2lnbmVkIGluIHRvIGNoYW5nZSBub3RpZmljYXRpb24gc2V0dGluZ3Ncbi0gICBbRm9yayAxLjNrXSgvbG9naW4/cmV0dXJuX3RvPSUyRmJhZGxvZ2ljJTJGcGktbW9ubylcbi0gICBbU3RhciAxMy4xa10oL2xvZ2luP3JldHVybl90bz0lMkZiYWRsb2dpYyUyRnBpLW1vbm8pXG4gICAgXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHMgMl0oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsbHMpXG4tICAgW0Rpc2N1c3Npb25zXSgvYmFkbG9naWMvcGktbW9uby9kaXNjdXNzaW9ucylcbi0gICBbQWN0aW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vYWN0aW9ucylcbi0gICBbUHJvamVjdHMgMF0oL2JhZGxvZ2ljL3BpLW1vbm8vcHJvamVjdHMpXG4tICAgW1NlY3VyaXR5IDBdKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbkFkZGl0aW9uYWwgbmF2aWdhdGlvbiBvcHRpb25zXG5cbi0gICBbQ29kZV0oL2JhZGxvZ2ljL3BpLW1vbm8pXG4tICAgW1B1bGwgcmVxdWVzdHNdKC9iYWRsb2dpYy9waS1tb25vL3B1bGxzKVxuLSAgIFtEaXNjdXNzaW9uc10oL2JhZGxvZ2ljL3BpLW1vbm8vZGlzY3Vzc2lvbnMpXG4tICAgW0FjdGlvbnNdKC9iYWRsb2dpYy9waS1tb25vL2FjdGlvbnMpXG4tICAgW1Byb2plY3RzXSgvYmFkbG9naWMvcGktbW9uby9wcm9qZWN0cylcbi0gICBbU2VjdXJpdHldKC9iYWRsb2dpYy9waS1tb25vL3NlY3VyaXR5KVxuLSAgIFtJbnNpZ2h0c10oL2JhZGxvZ2ljL3BpLW1vbm8vcHVsc2UpXG5cbiMjIEZvb3RlclxuXG48aHR0cHM6Ly9naXRodWIuY29tPsKpIDIwMjYgR2l0SHViLMKgSW5jLlxuXG4jIyMgRm9vdGVyIG5hdmlnYXRpb25cblxuLSAgIFtUZXJtc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vc2l0ZS1wb2xpY3kvZ2l0aHViLXRlcm1zL2dpdGh1Yi10ZXJtcy1vZi1zZXJ2aWNlKVxuLSAgIFtQcml2YWN5XShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9zaXRlLXBvbGljeS9wcml2YWN5LXBvbGljaWVzL2dpdGh1Yi1wcml2YWN5LXN0YXRlbWVudClcbi0gICBbU2VjdXJpdHldKGh0dHBzOi8vZ2l0aHViLmNvbS9zZWN1cml0eSlcbi0gICBbU3RhdHVzXShodHRwczovL3d3dy5naXRodWJzdGF0dXMuY29tLylcbi0gICBbQ29tbXVuaXR5XShodHRwczovL2dpdGh1Yi5jb21tdW5pdHkvKVxuLSAgIFtEb2NzXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS8pXG4tICAgW0NvbnRhY3RdKGh0dHBzOi8vc3VwcG9ydC5naXRodWIuY29tP3RhZ3M9ZG90Y29tLWZvb3Rlcilcbi0gICBNYW5hZ2UgY29va2llc1xuLSAgIERvIG5vdCBzaGFyZSBteSBwZXJzb25hbCBpbmZvcm1hdGlvblxuXG5Zb3UgY2Fu4oCZdCBwZXJmb3JtIHRoYXQgYWN0aW9uIGF0IHRoaXMgdGltZS4iLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzUyMDQxNSwiZW5kZWRBdCI6MTc3MTM0NzUyMzU2NiwiZHVyYXRpb25NcyI6MzE1MX19fX0sImVuZGVkQXQiOjE3NzEzNDc1MjM1NjksImR1cmF0aW9uTXMiOjMxNTF9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDFDRnVBYmNNcHVjTGhNN0RmTGRjM29ZIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jbGkvbGlzdC1tb2RlbHMudHMifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzUyMzU2OSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMgbGlzdC1tb2RlbHMudHNcblxuKipQYXRoOioqIGBwYWNrYWdlcy9jb2RpbmctYWdlbnQvc3JjL2NsaS9saXN0LW1vZGVscy50c2BcbioqU2l6ZToqKiAzMTc4IGJ5dGVzXG5cbmBgYHR5cGVzY3JpcHRcbi8qKlxuICogTGlzdCBhdmFpbGFibGUgbW9kZWxzIHdpdGggb3B0aW9uYWwgZnV6enkgc2VhcmNoXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcGksIE1vZGVsIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktYWlcIjtcbmltcG9ydCB7IGZ1enp5RmlsdGVyIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsUmVnaXN0cnkgfSBmcm9tIFwiLi4vY29yZS9tb2RlbC1yZWdpc3RyeS5qc1wiO1xuXG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBhcyBodW1hbi1yZWFkYWJsZSAoZS5nLiwgMjAwMDAwIC0+IFwiMjAwS1wiLCAxMDAwMDAwIC0+IFwiMU1cIilcbiAqL1xuZnVuY3Rpb24gZm9ybWF0VG9rZW5Db3VudChjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcblx0aWYgKGNvdW50ID49IDFfMDAwXzAwMCkge1xuXHRcdGNvbnN0IG1pbGxpb25zID0gY291bnQgLyAxXzAwMF8wMDA7XG5cdFx0cmV0dXJuIG1pbGxpb25zICUgMSA9PT0gMCA/IGAke21pbGxpb25zfU1gIDogYCR7bWlsbGlvbnMudG9GaXhlZCgxKX1NYDtcblx0fVxuXHRpZiAoY291bnQgPj0gMV8wMDApIHtcblx0XHRjb25zdCB0aG91c2FuZHMgPSBjb3VudCAvIDFfMDAwO1xuXHRcdHJldHVybiB0aG91c2FuZHMgJSAxID09PSAwID8gYCR7dGhvdXNhbmRzfUtgIDogYCR7dGhvdXNhbmRzLnRvRml4ZWQoMSl9S2A7XG5cdH1cblx0cmV0dXJuIGNvdW50LnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogTGlzdCBhdmFpbGFibGUgbW9kZWxzLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IHNlYXJjaCBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0TW9kZWxzKG1vZGVsUmVnaXN0cnk6IE1vZGVsUmVnaXN0cnksIHNlYXJjaFBhdHRlcm4/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgbW9kZWxzID0gbW9kZWxSZWdpc3RyeS5nZXRBdmFpbGFibGUoKTtcblxuXHRpZiAobW9kZWxzLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnNvbGUubG9nKFwiTm8gbW9kZWxzIGF2YWlsYWJsZS4gU2V0IEFQSSBrZXlzIGluIGVudmlyb25tZW50IHZhcmlhYmxlcy5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gQXBwbHkgZnV6enkgZmlsdGVyIGlmIHNlYXJjaCBwYXR0ZXJuIHByb3ZpZGVkXG5cdGxldCBmaWx0ZXJlZE1vZGVsczogTW9kZWw8QXBpPltdID0gbW9kZWxzO1xuXHRpZiAoc2VhcmNoUGF0dGVybikge1xuXHRcdGZpbHRlcmVkTW9kZWxzID0gZnV6enlGaWx0ZXIobW9kZWxzLCBzZWFyY2hQYXR0ZXJuLCAobSkgPT4gYCR7bS5wcm92aWRlcn0gJHttLmlkfWApO1xuXHR9XG5cblx0aWYgKGZpbHRlcmVkTW9kZWxzLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnNvbGUubG9nKGBObyBtb2RlbHMgbWF0Y2hpbmcgXCIke3NlYXJjaFBhdHRlcm59XCJgKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTb3J0IGJ5IHByb3ZpZGVyLCB0aGVuIGJ5IG1vZGVsIGlkXG5cdGZpbHRlcmVkTW9kZWxzLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBwcm92aWRlckNtcCA9IGEucHJvdmlkZXIubG9jYWxlQ29tcGFyZShiLnByb3ZpZGVyKTtcblx0XHRpZiAocHJvdmlkZXJDbXAgIT09IDApIHJldHVybiBwcm92aWRlckNtcDtcblx0XHRyZXR1cm4gYS5pZC5sb2NhbGVDb21wYXJlKGIuaWQpO1xuXHR9KTtcblxuXHQvLyBDYWxjdWxhdGUgY29sdW1uIHdpZHRoc1xuXHRjb25zdCByb3dzID0gZmlsdGVyZWRNb2RlbHMubWFwKChtKSA9PiAoe1xuXHRcdHByb3ZpZGVyOiBtLnByb3ZpZGVyLFxuXHRcdG1vZGVsOiBtLmlkLFxuXHRcdGNvbnRleHQ6IGZvcm1hdFRva2VuQ291bnQobS5jb250ZXh0V2luZG93KSxcblx0XHRtYXhPdXQ6IGZvcm1hdFRva2VuQ291bnQobS5tYXhUb2tlbnMpLFxuXHRcdHRoaW5raW5nOiBtLnJlYXNvbmluZyA/IFwieWVzXCIgOiBcIm5vXCIsXG5cdFx0aW1hZ2VzOiBtLmlucHV0LmluY2x1ZGVzKFwiaW1hZ2VcIikgPyBcInllc1wiIDogXCJub1wiLFxuXHR9KSk7XG5cblx0Y29uc3QgaGVhZGVycyA9IHtcblx0XHRwcm92aWRlcjogXCJwcm92aWRlclwiLFxuXHRcdG1vZGVsOiBcIm1vZGVsXCIsXG5cdFx0Y29udGV4dDogXCJjb250ZXh0XCIsXG5cdFx0bWF4T3V0OiBcIm1heC1vdXRcIixcblx0XHR0aGlua2luZzogXCJ0aGlua2luZ1wiLFxuXHRcdGltYWdlczogXCJpbWFnZXNcIixcblx0fTtcblxuXHRjb25zdCB3aWR0aHMgPSB7XG5cdFx0cHJvdmlkZXI6IE1hdGgubWF4KGhlYWRlcnMucHJvdmlkZXIubGVuZ3RoLCAuLi5yb3dzLm1hcCgocikgPT4gci5wcm92aWRlci5sZW5ndGgpKSxcblx0XHRtb2RlbDogTWF0aC5tYXgoaGVhZGVycy5tb2RlbC5sZW5ndGgsIC4uLnJvd3MubWFwKChyKSA9PiByLm1vZGVsLmxlbmd0aCkpLFxuXHRcdGNvbnRleHQ6IE1hdGgubWF4KGhlYWRlcnMuY29udGV4dC5sZW5ndGgsIC4uLnJvd3MubWFwKChyKSA9PiByLmNvbnRleHQubGVuZ3RoKSksXG5cdFx0bWF4T3V0OiBNYXRoLm1heChoZWFkZXJzLm1heE91dC5sZW5ndGgsIC4uLnJvd3MubWFwKChyKSA9PiByLm1heE91dC5sZW5ndGgpKSxcblx0XHR0aGlua2luZzogTWF0aC5tYXgoaGVhZGVycy50aGlua2luZy5sZW5ndGgsIC4uLnJvd3MubWFwKChyKSA9PiByLnRoaW5raW5nLmxlbmd0aCkpLFxuXHRcdGltYWdlczogTWF0aC5tYXgoaGVhZGVycy5pbWFnZXMubGVuZ3RoLCAuLi5yb3dzLm1hcCgocikgPT4gci5pbWFnZXMubGVuZ3RoKSksXG5cdH07XG5cblx0Ly8gUHJpbnQgaGVhZGVyXG5cdGNvbnN0IGhlYWRlckxpbmUgPSBbXG5cdFx0aGVhZGVycy5wcm92aWRlci5wYWRFbmQod2lkdGhzLnByb3ZpZGVyKSxcblx0XHRoZWFkZXJzLm1vZGVsLnBhZEVuZCh3aWR0aHMubW9kZWwpLFxuXHRcdGhlYWRlcnMuY29udGV4dC5wYWRFbmQod2lkdGhzLmNvbnRleHQpLFxuXHRcdGhlYWRlcnMubWF4T3V0LnBhZEVuZCh3aWR0aHMubWF4T3V0KSxcblx0XHRoZWFkZXJzLnRoaW5raW5nLnBhZEVuZCh3aWR0aHMudGhpbmtpbmcpLFxuXHRcdGhlYWRlcnMuaW1hZ2VzLnBhZEVuZCh3aWR0aHMuaW1hZ2VzKSxcblx0XS5qb2luKFwiICBcIik7XG5cdGNvbnNvbGUubG9nKGhlYWRlckxpbmUpO1xuXG5cdC8vIFByaW50IHJvd3Ncblx0Zm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuXHRcdGNvbnN0IGxpbmUgPSBbXG5cdFx0XHRyb3cucHJvdmlkZXIucGFkRW5kKHdpZHRocy5wcm92aWRlciksXG5cdFx0XHRyb3cubW9kZWwucGFkRW5kKHdpZHRocy5tb2RlbCksXG5cdFx0XHRyb3cuY29udGV4dC5wYWRFbmQod2lkdGhzLmNvbnRleHQpLFxuXHRcdFx0cm93Lm1heE91dC5wYWRFbmQod2lkdGhzLm1heE91dCksXG5cdFx0XHRyb3cudGhpbmtpbmcucGFkRW5kKHdpZHRocy50aGlua2luZyksXG5cdFx0XHRyb3cuaW1hZ2VzLnBhZEVuZCh3aWR0aHMuaW1hZ2VzKSxcblx0XHRdLmpvaW4oXCIgIFwiKTtcblx0XHRjb25zb2xlLmxvZyhsaW5lKTtcblx0fVxufVxuXG5gYGBcbiJ9XSwiZGV0YWlscyI6eyJvd25lciI6ImJhZGxvZ2ljIiwicmVwbyI6InBpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvY29kaW5nLWFnZW50L3NyYy9jbGkvbGlzdC1tb2RlbHMudHMiLCJyZWYiOm51bGwsImNvbnRlbnRUeXBlIjoiZmlsZSIsIl9fbWV0YSI6eyJ0aW1pbmciOnsic3RhcnRlZEF0IjoxNzcxMzQ3NTIzNTY2LCJlbmRlZEF0IjoxNzcxMzQ3NTIzODAwLCJkdXJhdGlvbk1zIjoyMzR9fX19LCJlbmRlZEF0IjoxNzcxMzQ3NTIzODA0LCJkdXJhdGlvbk1zIjoyMzV9LHsidG9vbENhbGxJZCI6InRvb2x1X2JkcmtfMDE1NHFCVm5TbUxSaGNOZm9IZTM0dmZEIiwidG9vbE5hbWUiOiJnaXRodWJfY29udGVudCIsImFyZ3MiOnsicmVwbyI6ImJhZGxvZ2ljL3BpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvUkVBRE1FLm1kIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDc1MjM4MDUsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIFJFQURNRS5tZFxuXG4qKlBhdGg6KiogYHBhY2thZ2VzL2FpL1JFQURNRS5tZGBcbioqU2l6ZToqKiA0MzgxNSBieXRlc1xuXG5gYGBtYXJrZG93blxuIyBAbWFyaW96ZWNobmVyL3BpLWFpXG5cblVuaWZpZWQgTExNIEFQSSB3aXRoIGF1dG9tYXRpYyBtb2RlbCBkaXNjb3ZlcnksIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24sIHRva2VuIGFuZCBjb3N0IHRyYWNraW5nLCBhbmQgc2ltcGxlIGNvbnRleHQgcGVyc2lzdGVuY2UgYW5kIGhhbmQtb2ZmIHRvIG90aGVyIG1vZGVscyBtaWQtc2Vzc2lvbi5cblxuKipOb3RlKio6IFRoaXMgbGlicmFyeSBvbmx5IGluY2x1ZGVzIG1vZGVscyB0aGF0IHN1cHBvcnQgdG9vbCBjYWxsaW5nIChmdW5jdGlvbiBjYWxsaW5nKSwgYXMgdGhpcyBpcyBlc3NlbnRpYWwgZm9yIGFnZW50aWMgd29ya2Zsb3dzLlxuXG4jIyBUYWJsZSBvZiBDb250ZW50c1xuXG4tIFtTdXBwb3J0ZWQgUHJvdmlkZXJzXSgjc3VwcG9ydGVkLXByb3ZpZGVycylcbi0gW0luc3RhbGxhdGlvbl0oI2luc3RhbGxhdGlvbilcbi0gW1F1aWNrIFN0YXJ0XSgjcXVpY2stc3RhcnQpXG4tIFtUb29sc10oI3Rvb2xzKVxuICAtIFtEZWZpbmluZyBUb29sc10oI2RlZmluaW5nLXRvb2xzKVxuICAtIFtIYW5kbGluZyBUb29sIENhbGxzXSgjaGFuZGxpbmctdG9vbC1jYWxscylcbiAgLSBbU3RyZWFtaW5nIFRvb2wgQ2FsbHMgd2l0aCBQYXJ0aWFsIEpTT05dKCNzdHJlYW1pbmctdG9vbC1jYWxscy13aXRoLXBhcnRpYWwtanNvbilcbiAgLSBbVmFsaWRhdGluZyBUb29sIEFyZ3VtZW50c10oI3ZhbGlkYXRpbmctdG9vbC1hcmd1bWVudHMpXG4gIC0gW0NvbXBsZXRlIEV2ZW50IFJlZmVyZW5jZV0oI2NvbXBsZXRlLWV2ZW50LXJlZmVyZW5jZSlcbi0gW0ltYWdlIElucHV0XSgjaW1hZ2UtaW5wdXQpXG4tIFtUaGlua2luZy9SZWFzb25pbmddKCN0aGlua2luZ3JlYXNvbmluZylcbiAgLSBbVW5pZmllZCBJbnRlcmZhY2VdKCN1bmlmaWVkLWludGVyZmFjZS1zdHJlYW1zaW1wbGVjb21wbGV0ZXNpbXBsZSlcbiAgLSBbUHJvdmlkZXItU3BlY2lmaWMgT3B0aW9uc10oI3Byb3ZpZGVyLXNwZWNpZmljLW9wdGlvbnMtc3RyZWFtY29tcGxldGUpXG4gIC0gW1N0cmVhbWluZyBUaGlua2luZyBDb250ZW50XSgjc3RyZWFtaW5nLXRoaW5raW5nLWNvbnRlbnQpXG4tIFtTdG9wIFJlYXNvbnNdKCNzdG9wLXJlYXNvbnMpXG4tIFtFcnJvciBIYW5kbGluZ10oI2Vycm9yLWhhbmRsaW5nKVxuICAtIFtBYm9ydGluZyBSZXF1ZXN0c10oI2Fib3J0aW5nLXJlcXVlc3RzKVxuICAtIFtDb250aW51aW5nIEFmdGVyIEFib3J0XSgjY29udGludWluZy1hZnRlci1hYm9ydClcbi0gW0FQSXMsIE1vZGVscywgYW5kIFByb3ZpZGVyc10oI2FwaXMtbW9kZWxzLWFuZC1wcm92aWRlcnMpXG4gIC0gW1Byb3ZpZGVycyBhbmQgTW9kZWxzXSgjcHJvdmlkZXJzLWFuZC1tb2RlbHMpXG4gIC0gW1F1ZXJ5aW5nIFByb3ZpZGVycyBhbmQgTW9kZWxzXSgjcXVlcnlpbmctcHJvdmlkZXJzLWFuZC1tb2RlbHMpXG4gIC0gW0N1c3RvbSBNb2RlbHNdKCNjdXN0b20tbW9kZWxzKVxuICAtIFtPcGVuQUkgQ29tcGF0aWJpbGl0eSBTZXR0aW5nc10oI29wZW5haS1jb21wYXRpYmlsaXR5LXNldHRpbmdzKVxuICAtIFtUeXBlIFNhZmV0eV0oI3R5cGUtc2FmZXR5KVxuLSBbQ3Jvc3MtUHJvdmlkZXIgSGFuZG9mZnNdKCNjcm9zcy1wcm92aWRlci1oYW5kb2Zmcylcbi0gW0NvbnRleHQgU2VyaWFsaXphdGlvbl0oI2NvbnRleHQtc2VyaWFsaXphdGlvbilcbi0gW0Jyb3dzZXIgVXNhZ2VdKCNicm93c2VyLXVzYWdlKVxuICAtIFtFbnZpcm9ubWVudCBWYXJpYWJsZXNdKCNlbnZpcm9ubWVudC12YXJpYWJsZXMtbm9kZWpzLW9ubHkpXG4gIC0gW0NoZWNraW5nIEVudmlyb25tZW50IFZhcmlhYmxlc10oI2NoZWNraW5nLWVudmlyb25tZW50LXZhcmlhYmxlcylcbi0gW09BdXRoIFByb3ZpZGVyc10oI29hdXRoLXByb3ZpZGVycylcbiAgLSBbVmVydGV4IEFJIChBREMpXSgjdmVydGV4LWFpLWFkYylcbiAgLSBbQ0xJIExvZ2luXSgjY2xpLWxvZ2luKVxuICAtIFtQcm9ncmFtbWF0aWMgT0F1dGhdKCNwcm9ncmFtbWF0aWMtb2F1dGgpXG4gIC0gW0xvZ2luIEZsb3cgRXhhbXBsZV0oI2xvZ2luLWZsb3ctZXhhbXBsZSlcbiAgLSBbVXNpbmcgT0F1dGggVG9rZW5zXSgjdXNpbmctb2F1dGgtdG9rZW5zKVxuICAtIFtQcm92aWRlciBOb3Rlc10oI3Byb3ZpZGVyLW5vdGVzKVxuLSBbTGljZW5zZV0oI2xpY2Vuc2UpXG5cbiMjIFN1cHBvcnRlZCBQcm92aWRlcnNcblxuLSAqKk9wZW5BSSoqXG4tICoqQXp1cmUgT3BlbkFJIChSZXNwb25zZXMpKipcbi0gKipPcGVuQUkgQ29kZXgqKiAoQ2hhdEdQVCBQbHVzL1BybyBzdWJzY3JpcHRpb24sIHJlcXVpcmVzIE9BdXRoLCBzZWUgYmVsb3cpXG4tICoqQW50aHJvcGljKipcbi0gKipHb29nbGUqKlxuLSAqKlZlcnRleCBBSSoqIChHZW1pbmkgdmlhIFZlcnRleCBBSSlcbi0gKipNaXN0cmFsKipcbi0gKipHcm9xKipcbi0gKipDZXJlYnJhcyoqXG4tICoqeEFJKipcbi0gKipPcGVuUm91dGVyKipcbi0gKipWZXJjZWwgQUkgR2F0ZXdheSoqXG4tICoqTWluaU1heCoqXG4tICoqR2l0SHViIENvcGlsb3QqKiAocmVxdWlyZXMgT0F1dGgsIHNlZSBiZWxvdylcbi0gKipHb29nbGUgR2VtaW5pIENMSSoqIChyZXF1aXJlcyBPQXV0aCwgc2VlIGJlbG93KVxuLSAqKkFudGlncmF2aXR5KiogKHJlcXVpcmVzIE9BdXRoLCBzZWUgYmVsb3cpXG4tICoqQW1hem9uIEJlZHJvY2sqKlxuLSAqKktpbWkgRm9yIENvZGluZyoqIChNb29uc2hvdCBBSSwgdXNlcyBBbnRocm9waWMtY29tcGF0aWJsZSBBUEkpXG4tICoqQW55IE9wZW5BSS1jb21wYXRpYmxlIEFQSSoqOiBPbGxhbWEsIHZMTE0sIExNIFN0dWRpbywgZXRjLlxuXG4jIyBJbnN0YWxsYXRpb25cblxuYGBgYmFzaFxubnBtIGluc3RhbGwgQG1hcmlvemVjaG5lci9waS1haVxuYGBgXG5cblR5cGVCb3ggZXhwb3J0cyBhcmUgcmUtZXhwb3J0ZWQgZnJvbSBgQG1hcmlvemVjaG5lci9waS1haWA6IGBUeXBlYCwgYFN0YXRpY2AsIGFuZCBgVFNjaGVtYWAuXG5cbiMjIFF1aWNrIFN0YXJ0XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IFR5cGUsIGdldE1vZGVsLCBzdHJlYW0sIGNvbXBsZXRlLCBDb250ZXh0LCBUb29sLCBTdHJpbmdFbnVtIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIEZ1bGx5IHR5cGVkIHdpdGggYXV0by1jb21wbGV0ZSBzdXBwb3J0IGZvciBib3RoIHByb3ZpZGVycyBhbmQgbW9kZWxzXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcblxuLy8gRGVmaW5lIHRvb2xzIHdpdGggVHlwZUJveCBzY2hlbWFzIGZvciB0eXBlIHNhZmV0eSBhbmQgdmFsaWRhdGlvblxuY29uc3QgdG9vbHM6IFRvb2xbXSA9IFt7XG4gIG5hbWU6ICdnZXRfdGltZScsXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBjdXJyZW50IHRpbWUnLFxuICBwYXJhbWV0ZXJzOiBUeXBlLk9iamVjdCh7XG4gICAgdGltZXpvbmU6IFR5cGUuT3B0aW9uYWwoVHlwZS5TdHJpbmcoeyBkZXNjcmlwdGlvbjogJ09wdGlvbmFsIHRpbWV6b25lIChlLmcuLCBBbWVyaWNhL05ld19Zb3JrKScgfSkpXG4gIH0pXG59XTtcblxuLy8gQnVpbGQgYSBjb252ZXJzYXRpb24gY29udGV4dCAoZWFzaWx5IHNlcmlhbGl6YWJsZSBhbmQgdHJhbnNmZXJhYmxlIGJldHdlZW4gbW9kZWxzKVxuY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgc3lzdGVtUHJvbXB0OiAnWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LicsXG4gIG1lc3NhZ2VzOiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdXaGF0IHRpbWUgaXMgaXQ/JyB9XSxcbiAgdG9vbHNcbn07XG5cbi8vIE9wdGlvbiAxOiBTdHJlYW1pbmcgd2l0aCBhbGwgZXZlbnQgdHlwZXNcbmNvbnN0IHMgPSBzdHJlYW0obW9kZWwsIGNvbnRleHQpO1xuXG5mb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHMpIHtcbiAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29uc29sZS5sb2coYFN0YXJ0aW5nIHdpdGggJHtldmVudC5wYXJ0aWFsLm1vZGVsfWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGV4dF9zdGFydCc6XG4gICAgICBjb25zb2xlLmxvZygnXFxuW1RleHQgc3RhcnRlZF0nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RleHRfZGVsdGEnOlxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZXZlbnQuZGVsdGEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGV4dF9lbmQnOlxuICAgICAgY29uc29sZS5sb2coJ1xcbltUZXh0IGVuZGVkXScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGhpbmtpbmdfc3RhcnQnOlxuICAgICAgY29uc29sZS5sb2coJ1tNb2RlbCBpcyB0aGlua2luZy4uLl0nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RoaW5raW5nX2RlbHRhJzpcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGV2ZW50LmRlbHRhKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RoaW5raW5nX2VuZCc6XG4gICAgICBjb25zb2xlLmxvZygnW1RoaW5raW5nIGNvbXBsZXRlXScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9vbGNhbGxfc3RhcnQnOlxuICAgICAgY29uc29sZS5sb2coYFxcbltUb29sIGNhbGwgc3RhcnRlZDogaW5kZXggJHtldmVudC5jb250ZW50SW5kZXh9XWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9vbGNhbGxfZGVsdGEnOlxuICAgICAgLy8gUGFydGlhbCB0b29sIGFyZ3VtZW50cyBhcmUgYmVpbmcgc3RyZWFtZWRcbiAgICAgIGNvbnN0IHBhcnRpYWxDYWxsID0gZXZlbnQucGFydGlhbC5jb250ZW50W2V2ZW50LmNvbnRlbnRJbmRleF07XG4gICAgICBpZiAocGFydGlhbENhbGwudHlwZSA9PT0gJ3Rvb2xDYWxsJykge1xuICAgICAgICBjb25zb2xlLmxvZyhgW1N0cmVhbWluZyBhcmdzIGZvciAke3BhcnRpYWxDYWxsLm5hbWV9XWApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9vbGNhbGxfZW5kJzpcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Ub29sIGNhbGxlZDogJHtldmVudC50b29sQ2FsbC5uYW1lfWApO1xuICAgICAgY29uc29sZS5sb2coYEFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShldmVudC50b29sQ2FsbC5hcmd1bWVudHMpfWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG9uZSc6XG4gICAgICBjb25zb2xlLmxvZyhgXFxuRmluaXNoZWQ6ICR7ZXZlbnQucmVhc29ufWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3I6ICR7ZXZlbnQuZXJyb3J9YCk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG4vLyBHZXQgdGhlIGZpbmFsIG1lc3NhZ2UgYWZ0ZXIgc3RyZWFtaW5nLCBhZGQgaXQgdG8gdGhlIGNvbnRleHRcbmNvbnN0IGZpbmFsTWVzc2FnZSA9IGF3YWl0IHMucmVzdWx0KCk7XG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2goZmluYWxNZXNzYWdlKTtcblxuLy8gSGFuZGxlIHRvb2wgY2FsbHMgaWYgYW55XG5jb25zdCB0b29sQ2FsbHMgPSBmaW5hbE1lc3NhZ2UuY29udGVudC5maWx0ZXIoYiA9PiBiLnR5cGUgPT09ICd0b29sQ2FsbCcpO1xuZm9yIChjb25zdCBjYWxsIG9mIHRvb2xDYWxscykge1xuICAvLyBFeGVjdXRlIHRoZSB0b29sXG4gIGNvbnN0IHJlc3VsdCA9IGNhbGwubmFtZSA9PT0gJ2dldF90aW1lJ1xuICAgID8gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIHRpbWVab25lOiBjYWxsLmFyZ3VtZW50cy50aW1lem9uZSB8fCAnVVRDJyxcbiAgICAgICAgZGF0ZVN0eWxlOiAnZnVsbCcsXG4gICAgICAgIHRpbWVTdHlsZTogJ2xvbmcnXG4gICAgICB9KVxuICAgIDogJ1Vua25vd24gdG9vbCc7XG5cbiAgLy8gQWRkIHRvb2wgcmVzdWx0IHRvIGNvbnRleHQgKHN1cHBvcnRzIHRleHQgYW5kIGltYWdlcylcbiAgY29udGV4dC5tZXNzYWdlcy5wdXNoKHtcbiAgICByb2xlOiAndG9vbFJlc3VsdCcsXG4gICAgdG9vbENhbGxJZDogY2FsbC5pZCxcbiAgICB0b29sTmFtZTogY2FsbC5uYW1lLFxuICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogcmVzdWx0IH1dLFxuICAgIGlzRXJyb3I6IGZhbHNlLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICB9KTtcbn1cblxuLy8gQ29udGludWUgaWYgdGhlcmUgd2VyZSB0b29sIGNhbGxzXG5pZiAodG9vbENhbGxzLmxlbmd0aCA+IDApIHtcbiAgY29uc3QgY29udGludWF0aW9uID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQpO1xuICBjb250ZXh0Lm1lc3NhZ2VzLnB1c2goY29udGludWF0aW9uKTtcbiAgY29uc29sZS5sb2coJ0FmdGVyIHRvb2wgZXhlY3V0aW9uOicsIGNvbnRpbnVhdGlvbi5jb250ZW50KTtcbn1cblxuY29uc29sZS5sb2coYFRvdGFsIHRva2VuczogJHtmaW5hbE1lc3NhZ2UudXNhZ2UuaW5wdXR9IGluLCAke2ZpbmFsTWVzc2FnZS51c2FnZS5vdXRwdXR9IG91dGApO1xuY29uc29sZS5sb2coYENvc3Q6ICQke2ZpbmFsTWVzc2FnZS51c2FnZS5jb3N0LnRvdGFsLnRvRml4ZWQoNCl9YCk7XG5cbi8vIE9wdGlvbiAyOiBHZXQgY29tcGxldGUgcmVzcG9uc2Ugd2l0aG91dCBzdHJlYW1pbmdcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQpO1xuXG5mb3IgKGNvbnN0IGJsb2NrIG9mIHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgaWYgKGJsb2NrLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGNvbnNvbGUubG9nKGJsb2NrLnRleHQpO1xuICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICd0b29sQ2FsbCcpIHtcbiAgICBjb25zb2xlLmxvZyhgVG9vbDogJHtibG9jay5uYW1lfSgke0pTT04uc3RyaW5naWZ5KGJsb2NrLmFyZ3VtZW50cyl9KWApO1xuICB9XG59XG5gYGBcblxuIyMgVG9vbHNcblxuVG9vbHMgZW5hYmxlIExMTXMgdG8gaW50ZXJhY3Qgd2l0aCBleHRlcm5hbCBzeXN0ZW1zLiBUaGlzIGxpYnJhcnkgdXNlcyBUeXBlQm94IHNjaGVtYXMgZm9yIHR5cGUtc2FmZSB0b29sIGRlZmluaXRpb25zIHdpdGggYXV0b21hdGljIHZhbGlkYXRpb24gdXNpbmcgQUpWLiBUeXBlQm94IHNjaGVtYXMgY2FuIGJlIHNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCBhcyBwbGFpbiBKU09OLCBtYWtpbmcgdGhlbSBpZGVhbCBmb3IgZGlzdHJpYnV0ZWQgc3lzdGVtcy5cblxuIyMjIERlZmluaW5nIFRvb2xzXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IFR5cGUsIFRvb2wsIFN0cmluZ0VudW0gfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gRGVmaW5lIHRvb2wgcGFyYW1ldGVycyB3aXRoIFR5cGVCb3hcbmNvbnN0IHdlYXRoZXJUb29sOiBUb29sID0ge1xuICBuYW1lOiAnZ2V0X3dlYXRoZXInLFxuICBkZXNjcmlwdGlvbjogJ0dldCBjdXJyZW50IHdlYXRoZXIgZm9yIGEgbG9jYXRpb24nLFxuICBwYXJhbWV0ZXJzOiBUeXBlLk9iamVjdCh7XG4gICAgbG9jYXRpb246IFR5cGUuU3RyaW5nKHsgZGVzY3JpcHRpb246ICdDaXR5IG5hbWUgb3IgY29vcmRpbmF0ZXMnIH0pLFxuICAgIHVuaXRzOiBTdHJpbmdFbnVtKFsnY2Vsc2l1cycsICdmYWhyZW5oZWl0J10sIHsgZGVmYXVsdDogJ2NlbHNpdXMnIH0pXG4gIH0pXG59O1xuXG4vLyBOb3RlOiBGb3IgR29vZ2xlIEFQSSBjb21wYXRpYmlsaXR5LCB1c2UgU3RyaW5nRW51bSBoZWxwZXIgaW5zdGVhZCBvZiBUeXBlLkVudW1cbi8vIFR5cGUuRW51bSBnZW5lcmF0ZXMgYW55T2YvY29uc3QgcGF0dGVybnMgdGhhdCBHb29nbGUgZG9lc24ndCBzdXBwb3J0XG5cbmNvbnN0IGJvb2tNZWV0aW5nVG9vbDogVG9vbCA9IHtcbiAgbmFtZTogJ2Jvb2tfbWVldGluZycsXG4gIGRlc2NyaXB0aW9uOiAnU2NoZWR1bGUgYSBtZWV0aW5nJyxcbiAgcGFyYW1ldGVyczogVHlwZS5PYmplY3Qoe1xuICAgIHRpdGxlOiBUeXBlLlN0cmluZyh7IG1pbkxlbmd0aDogMSB9KSxcbiAgICBzdGFydFRpbWU6IFR5cGUuU3RyaW5nKHsgZm9ybWF0OiAnZGF0ZS10aW1lJyB9KSxcbiAgICBlbmRUaW1lOiBUeXBlLlN0cmluZyh7IGZvcm1hdDogJ2RhdGUtdGltZScgfSksXG4gICAgYXR0ZW5kZWVzOiBUeXBlLkFycmF5KFR5cGUuU3RyaW5nKHsgZm9ybWF0OiAnZW1haWwnIH0pLCB7IG1pbkl0ZW1zOiAxIH0pXG4gIH0pXG59O1xuYGBgXG5cbiMjIyBIYW5kbGluZyBUb29sIENhbGxzXG5cblRvb2wgcmVzdWx0cyB1c2UgY29udGVudCBibG9ja3MgYW5kIGNhbiBpbmNsdWRlIGJvdGggdGV4dCBhbmQgaW1hZ2VzOlxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5cbmNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gIG1lc3NhZ2VzOiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdXaGF0IGlzIHRoZSB3ZWF0aGVyIGluIExvbmRvbj8nIH1dLFxuICB0b29sczogW3dlYXRoZXJUb29sXVxufTtcblxuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCk7XG5cbi8vIENoZWNrIGZvciB0b29sIGNhbGxzIGluIHRoZSByZXNwb25zZVxuZm9yIChjb25zdCBibG9jayBvZiByZXNwb25zZS5jb250ZW50KSB7XG4gIGlmIChibG9jay50eXBlID09PSAndG9vbENhbGwnKSB7XG4gICAgLy8gRXhlY3V0ZSB5b3VyIHRvb2wgd2l0aCB0aGUgYXJndW1lbnRzXG4gICAgLy8gU2VlIFwiVmFsaWRhdGluZyBUb29sIEFyZ3VtZW50c1wiIHNlY3Rpb24gZm9yIHZhbGlkYXRpb25cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlV2VhdGhlckFwaShibG9jay5hcmd1bWVudHMpO1xuXG4gICAgLy8gQWRkIHRvb2wgcmVzdWx0IHdpdGggdGV4dCBjb250ZW50XG4gICAgY29udGV4dC5tZXNzYWdlcy5wdXNoKHtcbiAgICAgIHJvbGU6ICd0b29sUmVzdWx0JyxcbiAgICAgIHRvb2xDYWxsSWQ6IGJsb2NrLmlkLFxuICAgICAgdG9vbE5hbWU6IGJsb2NrLm5hbWUsXG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCkgfV0sXG4gICAgICBpc0Vycm9yOiBmYWxzZSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgIH0pO1xuICB9XG59XG5cbi8vIFRvb2wgcmVzdWx0cyBjYW4gYWxzbyBpbmNsdWRlIGltYWdlcyAoZm9yIHZpc2lvbi1jYXBhYmxlIG1vZGVscylcbmNvbnN0IGltYWdlQnVmZmVyID0gcmVhZEZpbGVTeW5jKCdjaGFydC5wbmcnKTtcbmNvbnRleHQubWVzc2FnZXMucHVzaCh7XG4gIHJvbGU6ICd0b29sUmVzdWx0JyxcbiAgdG9vbENhbGxJZDogJ3Rvb2xfeHl6JyxcbiAgdG9vbE5hbWU6ICdnZW5lcmF0ZV9jaGFydCcsXG4gIGNvbnRlbnQ6IFtcbiAgICB7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ0dlbmVyYXRlZCBjaGFydCBzaG93aW5nIHRlbXBlcmF0dXJlIHRyZW5kcycgfSxcbiAgICB7IHR5cGU6ICdpbWFnZScsIGRhdGE6IGltYWdlQnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSwgbWltZVR5cGU6ICdpbWFnZS9wbmcnIH1cbiAgXSxcbiAgaXNFcnJvcjogZmFsc2UsXG4gIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxufSk7XG5gYGBcblxuIyMjIFN0cmVhbWluZyBUb29sIENhbGxzIHdpdGggUGFydGlhbCBKU09OXG5cbkR1cmluZyBzdHJlYW1pbmcsIHRvb2wgY2FsbCBhcmd1bWVudHMgYXJlIHByb2dyZXNzaXZlbHkgcGFyc2VkIGFzIHRoZXkgYXJyaXZlLiBUaGlzIGVuYWJsZXMgcmVhbC10aW1lIFVJIHVwZGF0ZXMgYmVmb3JlIHRoZSBjb21wbGV0ZSBhcmd1bWVudHMgYXJlIGF2YWlsYWJsZTpcblxuYGBgdHlwZXNjcmlwdFxuY29uc3QgcyA9IHN0cmVhbShtb2RlbCwgY29udGV4dCk7XG5cbmZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2Ygcykge1xuICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xjYWxsX2RlbHRhJykge1xuICAgIGNvbnN0IHRvb2xDYWxsID0gZXZlbnQucGFydGlhbC5jb250ZW50W2V2ZW50LmNvbnRlbnRJbmRleF07XG5cbiAgICAvLyB0b29sQ2FsbC5hcmd1bWVudHMgY29udGFpbnMgcGFydGlhbGx5IHBhcnNlZCBKU09OIGR1cmluZyBzdHJlYW1pbmdcbiAgICAvLyBUaGlzIGFsbG93cyBmb3IgcHJvZ3Jlc3NpdmUgVUkgdXBkYXRlc1xuICAgIGlmICh0b29sQ2FsbC50eXBlID09PSAndG9vbENhbGwnICYmIHRvb2xDYWxsLmFyZ3VtZW50cykge1xuICAgICAgLy8gQkUgREVGRU5TSVZFOiBhcmd1bWVudHMgbWF5IGJlIGluY29tcGxldGVcbiAgICAgIC8vIEV4YW1wbGU6IFNob3cgZmlsZSBwYXRoIGJlaW5nIHdyaXR0ZW4gZXZlbiBiZWZvcmUgY29udGVudCBpcyBjb21wbGV0ZVxuICAgICAgaWYgKHRvb2xDYWxsLm5hbWUgPT09ICd3cml0ZV9maWxlJyAmJiB0b29sQ2FsbC5hcmd1bWVudHMucGF0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGluZyB0bzogJHt0b29sQ2FsbC5hcmd1bWVudHMucGF0aH1gKTtcblxuICAgICAgICAvLyBDb250ZW50IG1pZ2h0IGJlIHBhcnRpYWwgb3IgbWlzc2luZ1xuICAgICAgICBpZiAodG9vbENhbGwuYXJndW1lbnRzLmNvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udGVudCBwcmV2aWV3OiAke3Rvb2xDYWxsLmFyZ3VtZW50cy5jb250ZW50LnN1YnN0cmluZygwLCAxMDApfS4uLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b29sY2FsbF9lbmQnKSB7XG4gICAgLy8gSGVyZSB0b29sQ2FsbC5hcmd1bWVudHMgaXMgY29tcGxldGUgKGJ1dCBub3QgeWV0IHZhbGlkYXRlZClcbiAgICBjb25zdCB0b29sQ2FsbCA9IGV2ZW50LnRvb2xDYWxsO1xuICAgIGNvbnNvbGUubG9nKGBUb29sIGNvbXBsZXRlZDogJHt0b29sQ2FsbC5uYW1lfWAsIHRvb2xDYWxsLmFyZ3VtZW50cyk7XG4gIH1cbn1cbmBgYFxuXG4qKkltcG9ydGFudCBub3RlcyBhYm91dCBwYXJ0aWFsIHRvb2wgYXJndW1lbnRzOioqXG4tIER1cmluZyBgdG9vbGNhbGxfZGVsdGFgIGV2ZW50cywgYGFyZ3VtZW50c2AgY29udGFpbnMgdGhlIGJlc3QtZWZmb3J0IHBhcnNlIG9mIHBhcnRpYWwgSlNPTlxuLSBGaWVsZHMgbWF5IGJlIG1pc3Npbmcgb3IgaW5jb21wbGV0ZSAtIGFsd2F5cyBjaGVjayBmb3IgZXhpc3RlbmNlIGJlZm9yZSB1c2Vcbi0gU3RyaW5nIHZhbHVlcyBtYXkgYmUgdHJ1bmNhdGVkIG1pZC13b3JkXG4tIEFycmF5cyBtYXkgYmUgaW5jb21wbGV0ZVxuLSBOZXN0ZWQgb2JqZWN0cyBtYXkgYmUgcGFydGlhbGx5IHBvcHVsYXRlZFxuLSBBdCBtaW5pbXVtLCBgYXJndW1lbnRzYCB3aWxsIGJlIGFuIGVtcHR5IG9iamVjdCBge31gLCBuZXZlciBgdW5kZWZpbmVkYFxuLSBUaGUgR29vZ2xlIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQgZnVuY3Rpb24gY2FsbCBzdHJlYW1pbmcuIEluc3RlYWQsIHlvdSB3aWxsIHJlY2VpdmUgYSBzaW5nbGUgYHRvb2xjYWxsX2RlbHRhYCBldmVudCB3aXRoIHRoZSBmdWxsIGFyZ3VtZW50cy5cblxuIyMjIFZhbGlkYXRpbmcgVG9vbCBBcmd1bWVudHNcblxuV2hlbiB1c2luZyBgYWdlbnRMb29wYCwgdG9vbCBhcmd1bWVudHMgYXJlIGF1dG9tYXRpY2FsbHkgdmFsaWRhdGVkIGFnYWluc3QgeW91ciBUeXBlQm94IHNjaGVtYXMgYmVmb3JlIGV4ZWN1dGlvbi4gSWYgdmFsaWRhdGlvbiBmYWlscywgdGhlIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSBtb2RlbCBhcyBhIHRvb2wgcmVzdWx0LCBhbGxvd2luZyBpdCB0byByZXRyeS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgeW91ciBvd24gdG9vbCBleGVjdXRpb24gbG9vcCB3aXRoIGBzdHJlYW0oKWAgb3IgYGNvbXBsZXRlKClgLCB1c2UgYHZhbGlkYXRlVG9vbENhbGxgIHRvIHZhbGlkYXRlIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHlvdXIgdG9vbHM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IHN0cmVhbSwgdmFsaWRhdGVUb29sQ2FsbCwgVG9vbCB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG5jb25zdCB0b29sczogVG9vbFtdID0gW3dlYXRoZXJUb29sLCBjYWxjdWxhdG9yVG9vbF07XG5jb25zdCBzID0gc3RyZWFtKG1vZGVsLCB7IG1lc3NhZ2VzLCB0b29scyB9KTtcblxuZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzKSB7XG4gIGlmIChldmVudC50eXBlID09PSAndG9vbGNhbGxfZW5kJykge1xuICAgIGNvbnN0IHRvb2xDYWxsID0gZXZlbnQudG9vbENhbGw7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgYXJndW1lbnRzIGFnYWluc3QgdGhlIHRvb2wncyBzY2hlbWEgKHRocm93cyBvbiBpbnZhbGlkIGFyZ3MpXG4gICAgICBjb25zdCB2YWxpZGF0ZWRBcmdzID0gdmFsaWRhdGVUb29sQ2FsbCh0b29scywgdG9vbENhbGwpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZU15VG9vbCh0b29sQ2FsbC5uYW1lLCB2YWxpZGF0ZWRBcmdzKTtcbiAgICAgIC8vIC4uLiBhZGQgdG9vbCByZXN1bHQgdG8gY29udGV4dFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCAtIHJldHVybiBlcnJvciBhcyB0b29sIHJlc3VsdCBzbyBtb2RlbCBjYW4gcmV0cnlcbiAgICAgIGNvbnRleHQubWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHJvbGU6ICd0b29sUmVzdWx0JyxcbiAgICAgICAgdG9vbENhbGxJZDogdG9vbENhbGwuaWQsXG4gICAgICAgIHRvb2xOYW1lOiB0b29sQ2FsbC5uYW1lLFxuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGVycm9yLm1lc3NhZ2UgfV0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5gYGBcblxuIyMjIENvbXBsZXRlIEV2ZW50IFJlZmVyZW5jZVxuXG5BbGwgc3RyZWFtaW5nIGV2ZW50cyBlbWl0dGVkIGR1cmluZyBhc3Npc3RhbnQgbWVzc2FnZSBnZW5lcmF0aW9uOlxuXG58IEV2ZW50IFR5cGUgfCBEZXNjcmlwdGlvbiB8IEtleSBQcm9wZXJ0aWVzIHxcbnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfFxufCBgc3RhcnRgIHwgU3RyZWFtIGJlZ2lucyB8IGBwYXJ0aWFsYDogSW5pdGlhbCBhc3Npc3RhbnQgbWVzc2FnZSBzdHJ1Y3R1cmUgfFxufCBgdGV4dF9zdGFydGAgfCBUZXh0IGJsb2NrIHN0YXJ0cyB8IGBjb250ZW50SW5kZXhgOiBQb3NpdGlvbiBpbiBjb250ZW50IGFycmF5IHxcbnwgYHRleHRfZGVsdGFgIHwgVGV4dCBjaHVuayByZWNlaXZlZCB8IGBkZWx0YWA6IE5ldyB0ZXh0LCBgY29udGVudEluZGV4YDogUG9zaXRpb24gfFxufCBgdGV4dF9lbmRgIHwgVGV4dCBibG9jayBjb21wbGV0ZSB8IGBjb250ZW50YDogRnVsbCB0ZXh0LCBgY29udGVudEluZGV4YDogUG9zaXRpb24gfFxufCBgdGhpbmtpbmdfc3RhcnRgIHwgVGhpbmtpbmcgYmxvY2sgc3RhcnRzIHwgYGNvbnRlbnRJbmRleGA6IFBvc2l0aW9uIGluIGNvbnRlbnQgYXJyYXkgfFxufCBgdGhpbmtpbmdfZGVsdGFgIHwgVGhpbmtpbmcgY2h1bmsgcmVjZWl2ZWQgfCBgZGVsdGFgOiBOZXcgdGV4dCwgYGNvbnRlbnRJbmRleGA6IFBvc2l0aW9uIHxcbnwgYHRoaW5raW5nX2VuZGAgfCBUaGlua2luZyBibG9jayBjb21wbGV0ZSB8IGBjb250ZW50YDogRnVsbCB0aGlua2luZywgYGNvbnRlbnRJbmRleGA6IFBvc2l0aW9uIHxcbnwgYHRvb2xjYWxsX3N0YXJ0YCB8IFRvb2wgY2FsbCBiZWdpbnMgfCBgY29udGVudEluZGV4YDogUG9zaXRpb24gaW4gY29udGVudCBhcnJheSB8XG58IGB0b29sY2FsbF9kZWx0YWAgfCBUb29sIGFyZ3VtZW50cyBzdHJlYW1pbmcgfCBgZGVsdGFgOiBKU09OIGNodW5rLCBgcGFydGlhbC5jb250ZW50W2NvbnRlbnRJbmRleF0uYXJndW1lbnRzYDogUGFydGlhbCBwYXJzZWQgYXJncyB8XG58IGB0b29sY2FsbF9lbmRgIHwgVG9vbCBjYWxsIGNvbXBsZXRlIHwgYHRvb2xDYWxsYDogQ29tcGxldGUgdmFsaWRhdGVkIHRvb2wgY2FsbCB3aXRoIGBpZGAsIGBuYW1lYCwgYGFyZ3VtZW50c2AgfFxufCBgZG9uZWAgfCBTdHJlYW0gY29tcGxldGUgfCBgcmVhc29uYDogU3RvcCByZWFzb24gKFwic3RvcFwiLCBcImxlbmd0aFwiLCBcInRvb2xVc2VcIiksIGBtZXNzYWdlYDogRmluYWwgYXNzaXN0YW50IG1lc3NhZ2UgfFxufCBgZXJyb3JgIHwgRXJyb3Igb2NjdXJyZWQgfCBgcmVhc29uYDogRXJyb3IgdHlwZSAoXCJlcnJvclwiIG9yIFwiYWJvcnRlZFwiKSwgYGVycm9yYDogQXNzaXN0YW50TWVzc2FnZSB3aXRoIHBhcnRpYWwgY29udGVudCB8XG5cbiMjIEltYWdlIElucHV0XG5cbk1vZGVscyB3aXRoIHZpc2lvbiBjYXBhYmlsaXRpZXMgY2FuIHByb2Nlc3MgaW1hZ2VzLiBZb3UgY2FuIGNoZWNrIGlmIGEgbW9kZWwgc3VwcG9ydHMgaW1hZ2VzIHZpYSB0aGUgYGlucHV0YCBwcm9wZXJ0eS4gSWYgeW91IHBhc3MgaW1hZ2VzIHRvIGEgbm9uLXZpc2lvbiBtb2RlbCwgdGhleSBhcmUgc2lsZW50bHkgaWdub3JlZC5cblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZ2V0TW9kZWwsIGNvbXBsZXRlIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbmNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ29wZW5haScsICdncHQtNG8tbWluaScpO1xuXG4vLyBDaGVjayBpZiBtb2RlbCBzdXBwb3J0cyBpbWFnZXNcbmlmIChtb2RlbC5pbnB1dC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICBjb25zb2xlLmxvZygnTW9kZWwgc3VwcG9ydHMgdmlzaW9uJyk7XG59XG5cbmNvbnN0IGltYWdlQnVmZmVyID0gcmVhZEZpbGVTeW5jKCdpbWFnZS5wbmcnKTtcbmNvbnN0IGJhc2U2NEltYWdlID0gaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG5jb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCB7XG4gIG1lc3NhZ2VzOiBbe1xuICAgIHJvbGU6ICd1c2VyJyxcbiAgICBjb250ZW50OiBbXG4gICAgICB7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ1doYXQgaXMgaW4gdGhpcyBpbWFnZT8nIH0sXG4gICAgICB7IHR5cGU6ICdpbWFnZScsIGRhdGE6IGJhc2U2NEltYWdlLCBtaW1lVHlwZTogJ2ltYWdlL3BuZycgfVxuICAgIF1cbiAgfV1cbn0pO1xuXG4vLyBBY2Nlc3MgdGhlIHJlc3BvbnNlXG5mb3IgKGNvbnN0IGJsb2NrIG9mIHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgaWYgKGJsb2NrLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGNvbnNvbGUubG9nKGJsb2NrLnRleHQpO1xuICB9XG59XG5gYGBcblxuIyMgVGhpbmtpbmcvUmVhc29uaW5nXG5cbk1hbnkgbW9kZWxzIHN1cHBvcnQgdGhpbmtpbmcvcmVhc29uaW5nIGNhcGFiaWxpdGllcyB3aGVyZSB0aGV5IGNhbiBzaG93IHRoZWlyIGludGVybmFsIHRob3VnaHQgcHJvY2Vzcy4gWW91IGNhbiBjaGVjayBpZiBhIG1vZGVsIHN1cHBvcnRzIHJlYXNvbmluZyB2aWEgdGhlIGByZWFzb25pbmdgIHByb3BlcnR5LiBJZiB5b3UgcGFzcyByZWFzb25pbmcgb3B0aW9ucyB0byBhIG5vbi1yZWFzb25pbmcgbW9kZWwsIHRoZXkgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG5cbiMjIyBVbmlmaWVkIEludGVyZmFjZSAoc3RyZWFtU2ltcGxlL2NvbXBsZXRlU2ltcGxlKVxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBnZXRNb2RlbCwgc3RyZWFtU2ltcGxlLCBjb21wbGV0ZVNpbXBsZSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBNYW55IG1vZGVscyBhY3Jvc3MgcHJvdmlkZXJzIHN1cHBvcnQgdGhpbmtpbmcvcmVhc29uaW5nXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdhbnRocm9waWMnLCAnY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0Jyk7XG4vLyBvciBnZXRNb2RlbCgnb3BlbmFpJywgJ2dwdC01LW1pbmknKTtcbi8vIG9yIGdldE1vZGVsKCdnb29nbGUnLCAnZ2VtaW5pLTIuNS1mbGFzaCcpO1xuLy8gb3IgZ2V0TW9kZWwoJ3hhaScsICdncm9rLWNvZGUtZmFzdC0xJyk7XG4vLyBvciBnZXRNb2RlbCgnZ3JvcScsICdvcGVuYWkvZ3B0LW9zcy0yMGInKTtcbi8vIG9yIGdldE1vZGVsKCdjZXJlYnJhcycsICdncHQtb3NzLTEyMGInKTtcbi8vIG9yIGdldE1vZGVsKCdvcGVucm91dGVyJywgJ3otYWkvZ2xtLTQuNXYnKTtcblxuLy8gQ2hlY2sgaWYgbW9kZWwgc3VwcG9ydHMgcmVhc29uaW5nXG5pZiAobW9kZWwucmVhc29uaW5nKSB7XG4gIGNvbnNvbGUubG9nKCdNb2RlbCBzdXBwb3J0cyByZWFzb25pbmcvdGhpbmtpbmcnKTtcbn1cblxuLy8gVXNlIHRoZSBzaW1wbGlmaWVkIHJlYXNvbmluZyBvcHRpb25cbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGVTaW1wbGUobW9kZWwsIHtcbiAgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ1NvbHZlOiAyeCArIDUgPSAxMycgfV1cbn0sIHtcbiAgcmVhc29uaW5nOiAnbWVkaXVtJyAgLy8gJ21pbmltYWwnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICd4aGlnaCcgKHhoaWdoIG1hcHMgdG8gaGlnaCBvbiBub24tT3BlbkFJIHByb3ZpZGVycylcbn0pO1xuXG4vLyBBY2Nlc3MgdGhpbmtpbmcgYW5kIHRleHQgYmxvY2tzXG5mb3IgKGNvbnN0IGJsb2NrIG9mIHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgaWYgKGJsb2NrLnR5cGUgPT09ICd0aGlua2luZycpIHtcbiAgICBjb25zb2xlLmxvZygnVGhpbmtpbmc6JywgYmxvY2sudGhpbmtpbmcpO1xuICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGNvbnNvbGUubG9nKCdSZXNwb25zZTonLCBibG9jay50ZXh0KTtcbiAgfVxufVxuYGBgXG5cbiMjIyBQcm92aWRlci1TcGVjaWZpYyBPcHRpb25zIChzdHJlYW0vY29tcGxldGUpXG5cbkZvciBmaW5lLWdyYWluZWQgY29udHJvbCwgdXNlIHRoZSBwcm92aWRlci1zcGVjaWZpYyBvcHRpb25zOlxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBnZXRNb2RlbCwgY29tcGxldGUgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gT3BlbkFJIFJlYXNvbmluZyAobzEsIG8zLCBncHQtNSlcbmNvbnN0IG9wZW5haU1vZGVsID0gZ2V0TW9kZWwoJ29wZW5haScsICdncHQtNS1taW5pJyk7XG5hd2FpdCBjb21wbGV0ZShvcGVuYWlNb2RlbCwgY29udGV4dCwge1xuICByZWFzb25pbmdFZmZvcnQ6ICdtZWRpdW0nLFxuICByZWFzb25pbmdTdW1tYXJ5OiAnZGV0YWlsZWQnICAvLyBPcGVuQUkgUmVzcG9uc2VzIEFQSSBvbmx5XG59KTtcblxuLy8gQW50aHJvcGljIFRoaW5raW5nIChDbGF1ZGUgU29ubmV0IDQpXG5jb25zdCBhbnRocm9waWNNb2RlbCA9IGdldE1vZGVsKCdhbnRocm9waWMnLCAnY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0Jyk7XG5hd2FpdCBjb21wbGV0ZShhbnRocm9waWNNb2RlbCwgY29udGV4dCwge1xuICB0aGlua2luZ0VuYWJsZWQ6IHRydWUsXG4gIHRoaW5raW5nQnVkZ2V0VG9rZW5zOiA4MTkyICAvLyBPcHRpb25hbCB0b2tlbiBsaW1pdFxufSk7XG5cbi8vIEdvb2dsZSBHZW1pbmkgVGhpbmtpbmdcbmNvbnN0IGdvb2dsZU1vZGVsID0gZ2V0TW9kZWwoJ2dvb2dsZScsICdnZW1pbmktMi41LWZsYXNoJyk7XG5hd2FpdCBjb21wbGV0ZShnb29nbGVNb2RlbCwgY29udGV4dCwge1xuICB0aGlua2luZzoge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgYnVkZ2V0VG9rZW5zOiA4MTkyICAvLyAtMSBmb3IgZHluYW1pYywgMCB0byBkaXNhYmxlXG4gIH1cbn0pO1xuYGBgXG5cbiMjIyBTdHJlYW1pbmcgVGhpbmtpbmcgQ29udGVudFxuXG5XaGVuIHN0cmVhbWluZywgdGhpbmtpbmcgY29udGVudCBpcyBkZWxpdmVyZWQgdGhyb3VnaCBzcGVjaWZpYyBldmVudHM6XG5cbmBgYHR5cGVzY3JpcHRcbmNvbnN0IHMgPSBzdHJlYW1TaW1wbGUobW9kZWwsIGNvbnRleHQsIHsgcmVhc29uaW5nOiAnaGlnaCcgfSk7XG5cbmZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2Ygcykge1xuICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICBjYXNlICd0aGlua2luZ19zdGFydCc6XG4gICAgICBjb25zb2xlLmxvZygnW01vZGVsIHN0YXJ0ZWQgdGhpbmtpbmddJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0aGlua2luZ19kZWx0YSc6XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShldmVudC5kZWx0YSk7ICAvLyBTdHJlYW0gdGhpbmtpbmcgY29udGVudFxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGhpbmtpbmdfZW5kJzpcbiAgICAgIGNvbnNvbGUubG9nKCdcXG5bVGhpbmtpbmcgY29tcGxldGVdJyk7XG4gICAgICBicmVhaztcbiAgfVxufVxuYGBgXG5cbiMjIFN0b3AgUmVhc29uc1xuXG5FdmVyeSBgQXNzaXN0YW50TWVzc2FnZWAgaW5jbHVkZXMgYSBgc3RvcFJlYXNvbmAgZmllbGQgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSBnZW5lcmF0aW9uIGVuZGVkOlxuXG4tIGBcInN0b3BcImAgLSBOb3JtYWwgY29tcGxldGlvbiwgdGhlIG1vZGVsIGZpbmlzaGVkIGl0cyByZXNwb25zZVxuLSBgXCJsZW5ndGhcImAgLSBPdXRwdXQgaGl0IHRoZSBtYXhpbXVtIHRva2VuIGxpbWl0XG4tIGBcInRvb2xVc2VcImAgLSBNb2RlbCBpcyBjYWxsaW5nIHRvb2xzIGFuZCBleHBlY3RzIHRvb2wgcmVzdWx0c1xuLSBgXCJlcnJvclwiYCAtIEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBnZW5lcmF0aW9uXG4tIGBcImFib3J0ZWRcImAgLSBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQgdmlhIGFib3J0IHNpZ25hbFxuXG4jIyBFcnJvciBIYW5kbGluZ1xuXG5XaGVuIGEgcmVxdWVzdCBlbmRzIHdpdGggYW4gZXJyb3IgKGluY2x1ZGluZyBhYm9ydHMgYW5kIHRvb2wgY2FsbCB2YWxpZGF0aW9uIGVycm9ycyksIHRoZSBzdHJlYW1pbmcgQVBJIGVtaXRzIGFuIGVycm9yIGV2ZW50OlxuXG5gYGB0eXBlc2NyaXB0XG4vLyBJbiBzdHJlYW1pbmdcbmZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2Ygc3RyZWFtKSB7XG4gIGlmIChldmVudC50eXBlID09PSAnZXJyb3InKSB7XG4gICAgLy8gZXZlbnQucmVhc29uIGlzIGVpdGhlciBcImVycm9yXCIgb3IgXCJhYm9ydGVkXCJcbiAgICAvLyBldmVudC5lcnJvciBpcyB0aGUgQXNzaXN0YW50TWVzc2FnZSB3aXRoIHBhcnRpYWwgY29udGVudFxuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yICgke2V2ZW50LnJlYXNvbn0pOmAsIGV2ZW50LmVycm9yLmVycm9yTWVzc2FnZSk7XG4gICAgY29uc29sZS5sb2coJ1BhcnRpYWwgY29udGVudDonLCBldmVudC5lcnJvci5jb250ZW50KTtcbiAgfVxufVxuXG4vLyBUaGUgZmluYWwgbWVzc2FnZSB3aWxsIGhhdmUgdGhlIGVycm9yIGRldGFpbHNcbmNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBzdHJlYW0ucmVzdWx0KCk7XG5pZiAobWVzc2FnZS5zdG9wUmVhc29uID09PSAnZXJyb3InIHx8IG1lc3NhZ2Uuc3RvcFJlYXNvbiA9PT0gJ2Fib3J0ZWQnKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1JlcXVlc3QgZmFpbGVkOicsIG1lc3NhZ2UuZXJyb3JNZXNzYWdlKTtcbiAgLy8gbWVzc2FnZS5jb250ZW50IGNvbnRhaW5zIGFueSBwYXJ0aWFsIGNvbnRlbnQgcmVjZWl2ZWQgYmVmb3JlIHRoZSBlcnJvclxuICAvLyBtZXNzYWdlLnVzYWdlIGNvbnRhaW5zIHBhcnRpYWwgdG9rZW4gY291bnRzIGFuZCBjb3N0c1xufVxuYGBgXG5cbiMjIyBBYm9ydGluZyBSZXF1ZXN0c1xuXG5UaGUgYWJvcnQgc2lnbmFsIGFsbG93cyB5b3UgdG8gY2FuY2VsIGluLXByb2dyZXNzIHJlcXVlc3RzLiBBYm9ydGVkIHJlcXVlc3RzIGhhdmUgYHN0b3BSZWFzb24gPT09ICdhYm9ydGVkJ2A6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldE1vZGVsLCBzdHJlYW0gfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnb3BlbmFpJywgJ2dwdC00by1taW5pJyk7XG5jb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4vLyBBYm9ydCBhZnRlciAyIHNlY29uZHNcbnNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCAyMDAwKTtcblxuY29uc3QgcyA9IHN0cmVhbShtb2RlbCwge1xuICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnV3JpdGUgYSBsb25nIHN0b3J5JyB9XVxufSwge1xuICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG59KTtcblxuZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBzKSB7XG4gIGlmIChldmVudC50eXBlID09PSAndGV4dF9kZWx0YScpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShldmVudC5kZWx0YSk7XG4gIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIC8vIGV2ZW50LnJlYXNvbiB0ZWxscyB5b3UgaWYgaXQgd2FzIFwiZXJyb3JcIiBvciBcImFib3J0ZWRcIlxuICAgIGNvbnNvbGUubG9nKGAke2V2ZW50LnJlYXNvbiA9PT0gJ2Fib3J0ZWQnID8gJ0Fib3J0ZWQnIDogJ0Vycm9yJ306YCwgZXZlbnQuZXJyb3IuZXJyb3JNZXNzYWdlKTtcbiAgfVxufVxuXG4vLyBHZXQgcmVzdWx0cyAobWF5IGJlIHBhcnRpYWwgaWYgYWJvcnRlZClcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcy5yZXN1bHQoKTtcbmlmIChyZXNwb25zZS5zdG9wUmVhc29uID09PSAnYWJvcnRlZCcpIHtcbiAgY29uc29sZS5sb2coJ1JlcXVlc3Qgd2FzIGFib3J0ZWQ6JywgcmVzcG9uc2UuZXJyb3JNZXNzYWdlKTtcbiAgY29uc29sZS5sb2coJ1BhcnRpYWwgY29udGVudCByZWNlaXZlZDonLCByZXNwb25zZS5jb250ZW50KTtcbiAgY29uc29sZS5sb2coJ1Rva2VucyB1c2VkOicsIHJlc3BvbnNlLnVzYWdlKTtcbn1cbmBgYFxuXG4jIyMgQ29udGludWluZyBBZnRlciBBYm9ydFxuXG5BYm9ydGVkIG1lc3NhZ2VzIGNhbiBiZSBhZGRlZCB0byB0aGUgY29udmVyc2F0aW9uIGNvbnRleHQgYW5kIGNvbnRpbnVlZCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzOlxuXG5gYGB0eXBlc2NyaXB0XG5jb25zdCBjb250ZXh0ID0ge1xuICBtZXNzYWdlczogW1xuICAgIHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnRXhwbGFpbiBxdWFudHVtIGNvbXB1dGluZyBpbiBkZXRhaWwnIH1cbiAgXVxufTtcblxuLy8gRmlyc3QgcmVxdWVzdCBnZXRzIGFib3J0ZWQgYWZ0ZXIgMiBzZWNvbmRzXG5jb25zdCBjb250cm9sbGVyMSA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbnNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlcjEuYWJvcnQoKSwgMjAwMCk7XG5cbmNvbnN0IHBhcnRpYWwgPSBhd2FpdCBjb21wbGV0ZShtb2RlbCwgY29udGV4dCwgeyBzaWduYWw6IGNvbnRyb2xsZXIxLnNpZ25hbCB9KTtcblxuLy8gQWRkIHRoZSBwYXJ0aWFsIHJlc3BvbnNlIHRvIGNvbnRleHRcbmNvbnRleHQubWVzc2FnZXMucHVzaChwYXJ0aWFsKTtcbmNvbnRleHQubWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ1BsZWFzZSBjb250aW51ZScgfSk7XG5cbi8vIENvbnRpbnVlIHRoZSBjb252ZXJzYXRpb25cbmNvbnN0IGNvbnRpbnVhdGlvbiA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCBjb250ZXh0KTtcbmBgYFxuXG4jIyMgRGVidWdnaW5nIFByb3ZpZGVyIFBheWxvYWRzXG5cblVzZSB0aGUgYG9uUGF5bG9hZGAgY2FsbGJhY2sgdG8gaW5zcGVjdCB0aGUgcmVxdWVzdCBwYXlsb2FkIHNlbnQgdG8gdGhlIHByb3ZpZGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHJlcXVlc3QgZm9ybWF0dGluZyBpc3N1ZXMgb3IgcHJvdmlkZXIgdmFsaWRhdGlvbiBlcnJvcnMuXG5cbmBgYHR5cGVzY3JpcHRcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQsIHtcbiAgb25QYXlsb2FkOiAocGF5bG9hZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdQcm92aWRlciBwYXlsb2FkOicsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcbiAgfVxufSk7XG5gYGBcblxuVGhlIGNhbGxiYWNrIGlzIHN1cHBvcnRlZCBieSBgc3RyZWFtYCwgYGNvbXBsZXRlYCwgYHN0cmVhbVNpbXBsZWAsIGFuZCBgY29tcGxldGVTaW1wbGVgLlxuXG4jIyBBUElzLCBNb2RlbHMsIGFuZCBQcm92aWRlcnNcblxuVGhlIGxpYnJhcnkgdXNlcyBhIHJlZ2lzdHJ5IG9mIEFQSSBpbXBsZW1lbnRhdGlvbnMuIEJ1aWx0LWluIEFQSXMgaW5jbHVkZTpcblxuLSAqKmBhbnRocm9waWMtbWVzc2FnZXNgKio6IEFudGhyb3BpYyBNZXNzYWdlcyBBUEkgKGBzdHJlYW1BbnRocm9waWNgLCBgQW50aHJvcGljT3B0aW9uc2ApXG4tICoqYGdvb2dsZS1nZW5lcmF0aXZlLWFpYCoqOiBHb29nbGUgR2VuZXJhdGl2ZSBBSSBBUEkgKGBzdHJlYW1Hb29nbGVgLCBgR29vZ2xlT3B0aW9uc2ApXG4tICoqYGdvb2dsZS1nZW1pbmktY2xpYCoqOiBHb29nbGUgQ2xvdWQgQ29kZSBBc3Npc3QgQVBJIChgc3RyZWFtR29vZ2xlR2VtaW5pQ2xpYCwgYEdvb2dsZUdlbWluaUNsaU9wdGlvbnNgKVxuLSAqKmBnb29nbGUtdmVydGV4YCoqOiBHb29nbGUgVmVydGV4IEFJIEFQSSAoYHN0cmVhbUdvb2dsZVZlcnRleGAsIGBHb29nbGVWZXJ0ZXhPcHRpb25zYClcbi0gKipgb3BlbmFpLWNvbXBsZXRpb25zYCoqOiBPcGVuQUkgQ2hhdCBDb21wbGV0aW9ucyBBUEkgKGBzdHJlYW1PcGVuQUlDb21wbGV0aW9uc2AsIGBPcGVuQUlDb21wbGV0aW9uc09wdGlvbnNgKVxuLSAqKmBvcGVuYWktcmVzcG9uc2VzYCoqOiBPcGVuQUkgUmVzcG9uc2VzIEFQSSAoYHN0cmVhbU9wZW5BSVJlc3BvbnNlc2AsIGBPcGVuQUlSZXNwb25zZXNPcHRpb25zYClcbi0gKipgb3BlbmFpLWNvZGV4LXJlc3BvbnNlc2AqKjogT3BlbkFJIENvZGV4IFJlc3BvbnNlcyBBUEkgKGBzdHJlYW1PcGVuQUlDb2RleFJlc3BvbnNlc2AsIGBPcGVuQUlDb2RleFJlc3BvbnNlc09wdGlvbnNgKVxuLSAqKmBhenVyZS1vcGVuYWktcmVzcG9uc2VzYCoqOiBBenVyZSBPcGVuQUkgUmVzcG9uc2VzIEFQSSAoYHN0cmVhbUF6dXJlT3BlbkFJUmVzcG9uc2VzYCwgYEF6dXJlT3BlbkFJUmVzcG9uc2VzT3B0aW9uc2ApXG4tICoqYGJlZHJvY2stY29udmVyc2Utc3RyZWFtYCoqOiBBbWF6b24gQmVkcm9jayBDb252ZXJzZSBBUEkgKGBzdHJlYW1CZWRyb2NrYCwgYEJlZHJvY2tPcHRpb25zYClcblxuIyMjIFByb3ZpZGVycyBhbmQgTW9kZWxzXG5cbkEgKipwcm92aWRlcioqIG9mZmVycyBtb2RlbHMgdGhyb3VnaCBhIHNwZWNpZmljIEFQSS4gRm9yIGV4YW1wbGU6XG4tICoqQW50aHJvcGljKiogbW9kZWxzIHVzZSB0aGUgYGFudGhyb3BpYy1tZXNzYWdlc2AgQVBJXG4tICoqR29vZ2xlKiogbW9kZWxzIHVzZSB0aGUgYGdvb2dsZS1nZW5lcmF0aXZlLWFpYCBBUElcbi0gKipPcGVuQUkqKiBtb2RlbHMgdXNlIHRoZSBgb3BlbmFpLXJlc3BvbnNlc2AgQVBJXG4tICoqTWlzdHJhbCwgeEFJLCBDZXJlYnJhcywgR3JvcSwgZXRjLioqIG1vZGVscyB1c2UgdGhlIGBvcGVuYWktY29tcGxldGlvbnNgIEFQSSAoT3BlbkFJLWNvbXBhdGlibGUpXG5cbiMjIyBRdWVyeWluZyBQcm92aWRlcnMgYW5kIE1vZGVsc1xuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBnZXRQcm92aWRlcnMsIGdldE1vZGVscywgZ2V0TW9kZWwgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gR2V0IGFsbCBhdmFpbGFibGUgcHJvdmlkZXJzXG5jb25zdCBwcm92aWRlcnMgPSBnZXRQcm92aWRlcnMoKTtcbmNvbnNvbGUubG9nKHByb3ZpZGVycyk7IC8vIFsnb3BlbmFpJywgJ2FudGhyb3BpYycsICdnb29nbGUnLCAneGFpJywgJ2dyb3EnLCAuLi5dXG5cbi8vIEdldCBhbGwgbW9kZWxzIGZyb20gYSBwcm92aWRlciAoZnVsbHkgdHlwZWQpXG5jb25zdCBhbnRocm9waWNNb2RlbHMgPSBnZXRNb2RlbHMoJ2FudGhyb3BpYycpO1xuZm9yIChjb25zdCBtb2RlbCBvZiBhbnRocm9waWNNb2RlbHMpIHtcbiAgY29uc29sZS5sb2coYCR7bW9kZWwuaWR9OiAke21vZGVsLm5hbWV9YCk7XG4gIGNvbnNvbGUubG9nKGAgIEFQSTogJHttb2RlbC5hcGl9YCk7IC8vICdhbnRocm9waWMtbWVzc2FnZXMnXG4gIGNvbnNvbGUubG9nKGAgIENvbnRleHQ6ICR7bW9kZWwuY29udGV4dFdpbmRvd30gdG9rZW5zYCk7XG4gIGNvbnNvbGUubG9nKGAgIFZpc2lvbjogJHttb2RlbC5pbnB1dC5pbmNsdWRlcygnaW1hZ2UnKX1gKTtcbiAgY29uc29sZS5sb2coYCAgUmVhc29uaW5nOiAke21vZGVsLnJlYXNvbmluZ31gKTtcbn1cblxuLy8gR2V0IGEgc3BlY2lmaWMgbW9kZWwgKGJvdGggcHJvdmlkZXIgYW5kIG1vZGVsIElEIGFyZSBhdXRvLWNvbXBsZXRlZCBpbiBJREVzKVxuY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnb3BlbmFpJywgJ2dwdC00by1taW5pJyk7XG5jb25zb2xlLmxvZyhgVXNpbmcgJHttb2RlbC5uYW1lfSB2aWEgJHttb2RlbC5hcGl9IEFQSWApO1xuYGBgXG5cbiMjIyBDdXN0b20gTW9kZWxzXG5cbllvdSBjYW4gY3JlYXRlIGN1c3RvbSBtb2RlbHMgZm9yIGxvY2FsIGluZmVyZW5jZSBzZXJ2ZXJzIG9yIGN1c3RvbSBlbmRwb2ludHM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IE1vZGVsLCBzdHJlYW0gfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gRXhhbXBsZTogT2xsYW1hIHVzaW5nIE9wZW5BSS1jb21wYXRpYmxlIEFQSVxuY29uc3Qgb2xsYW1hTW9kZWw6IE1vZGVsPCdvcGVuYWktY29tcGxldGlvbnMnPiA9IHtcbiAgaWQ6ICdsbGFtYS0zLjEtOGInLFxuICBuYW1lOiAnTGxhbWEgMy4xIDhCIChPbGxhbWEpJyxcbiAgYXBpOiAnb3BlbmFpLWNvbXBsZXRpb25zJyxcbiAgcHJvdmlkZXI6ICdvbGxhbWEnLFxuICBiYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDoxMTQzNC92MScsXG4gIHJlYXNvbmluZzogZmFsc2UsXG4gIGlucHV0OiBbJ3RleHQnXSxcbiAgY29zdDogeyBpbnB1dDogMCwgb3V0cHV0OiAwLCBjYWNoZVJlYWQ6IDAsIGNhY2hlV3JpdGU6IDAgfSxcbiAgY29udGV4dFdpbmRvdzogMTI4MDAwLFxuICBtYXhUb2tlbnM6IDMyMDAwXG59O1xuXG4vLyBFeGFtcGxlOiBMaXRlTExNIHByb3h5IHdpdGggZXhwbGljaXQgY29tcGF0IHNldHRpbmdzXG5jb25zdCBsaXRlbGxtTW9kZWw6IE1vZGVsPCdvcGVuYWktY29tcGxldGlvbnMnPiA9IHtcbiAgaWQ6ICdncHQtNG8nLFxuICBuYW1lOiAnR1BULTRvICh2aWEgTGl0ZUxMTSknLFxuICBhcGk6ICdvcGVuYWktY29tcGxldGlvbnMnLFxuICBwcm92aWRlcjogJ2xpdGVsbG0nLFxuICBiYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0MDAwL3YxJyxcbiAgcmVhc29uaW5nOiBmYWxzZSxcbiAgaW5wdXQ6IFsndGV4dCcsICdpbWFnZSddLFxuICBjb3N0OiB7IGlucHV0OiAyLjUsIG91dHB1dDogMTAsIGNhY2hlUmVhZDogMCwgY2FjaGVXcml0ZTogMCB9LFxuICBjb250ZXh0V2luZG93OiAxMjgwMDAsXG4gIG1heFRva2VuczogMTYzODQsXG4gIGNvbXBhdDoge1xuICAgIHN1cHBvcnRzU3RvcmU6IGZhbHNlLCAgLy8gTGl0ZUxMTSBkb2Vzbid0IHN1cHBvcnQgdGhlIHN0b3JlIGZpZWxkXG4gIH1cbn07XG5cbi8vIEV4YW1wbGU6IEN1c3RvbSBlbmRwb2ludCB3aXRoIGhlYWRlcnMgKGJ5cGFzc2luZyBDbG91ZGZsYXJlIGJvdCBkZXRlY3Rpb24pXG5jb25zdCBwcm94eU1vZGVsOiBNb2RlbDwnYW50aHJvcGljLW1lc3NhZ2VzJz4gPSB7XG4gIGlkOiAnY2xhdWRlLXNvbm5ldC00JyxcbiAgbmFtZTogJ0NsYXVkZSBTb25uZXQgNCAoUHJveGllZCknLFxuICBhcGk6ICdhbnRocm9waWMtbWVzc2FnZXMnLFxuICBwcm92aWRlcjogJ2N1c3RvbS1wcm94eScsXG4gIGJhc2VVcmw6ICdodHRwczovL3Byb3h5LmV4YW1wbGUuY29tL3YxJyxcbiAgcmVhc29uaW5nOiB0cnVlLFxuICBpbnB1dDogWyd0ZXh0JywgJ2ltYWdlJ10sXG4gIGNvc3Q6IHsgaW5wdXQ6IDMsIG91dHB1dDogMTUsIGNhY2hlUmVhZDogMC4zLCBjYWNoZVdyaXRlOiAzLjc1IH0sXG4gIGNvbnRleHRXaW5kb3c6IDIwMDAwMCxcbiAgbWF4VG9rZW5zOiA4MTkyLFxuICBoZWFkZXJzOiB7XG4gICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2JyxcbiAgICAnWC1DdXN0b20tQXV0aCc6ICdiZWFyZXItdG9rZW4taGVyZSdcbiAgfVxufTtcblxuLy8gVXNlIHRoZSBjdXN0b20gbW9kZWxcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc3RyZWFtKG9sbGFtYU1vZGVsLCBjb250ZXh0LCB7XG4gIGFwaUtleTogJ2R1bW15JyAvLyBPbGxhbWEgZG9lc24ndCBuZWVkIGEgcmVhbCBrZXlcbn0pO1xuYGBgXG5cbiMjIyBPcGVuQUkgQ29tcGF0aWJpbGl0eSBTZXR0aW5nc1xuXG5UaGUgYG9wZW5haS1jb21wbGV0aW9uc2AgQVBJIGlzIGltcGxlbWVudGVkIGJ5IG1hbnkgcHJvdmlkZXJzIHdpdGggbWlub3IgZGlmZmVyZW5jZXMuIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5IGF1dG8tZGV0ZWN0cyBjb21wYXRpYmlsaXR5IHNldHRpbmdzIGJhc2VkIG9uIGBiYXNlVXJsYCBmb3Iga25vd24gcHJvdmlkZXJzIChDZXJlYnJhcywgeEFJLCBNaXN0cmFsLCBDaHV0ZXMsIGV0Yy4pLiBGb3IgY3VzdG9tIHByb3hpZXMgb3IgdW5rbm93biBlbmRwb2ludHMsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlc2Ugc2V0dGluZ3MgdmlhIHRoZSBgY29tcGF0YCBmaWVsZC4gRm9yIGBvcGVuYWktcmVzcG9uc2VzYCBtb2RlbHMsIHRoZSBjb21wYXQgZmllbGQgb25seSBzdXBwb3J0cyBSZXNwb25zZXMtc3BlY2lmaWMgZmxhZ3MuXG5cbmBgYHR5cGVzY3JpcHRcbmludGVyZmFjZSBPcGVuQUlDb21wbGV0aW9uc0NvbXBhdCB7XG4gIHN1cHBvcnRzU3RvcmU/OiBib29sZWFuOyAgICAgICAgICAgLy8gV2hldGhlciBwcm92aWRlciBzdXBwb3J0cyB0aGUgYHN0b3JlYCBmaWVsZCAoZGVmYXVsdDogdHJ1ZSlcbiAgc3VwcG9ydHNEZXZlbG9wZXJSb2xlPzogYm9vbGVhbjsgICAvLyBXaGV0aGVyIHByb3ZpZGVyIHN1cHBvcnRzIGBkZXZlbG9wZXJgIHJvbGUgdnMgYHN5c3RlbWAgKGRlZmF1bHQ6IHRydWUpXG4gIHN1cHBvcnRzUmVhc29uaW5nRWZmb3J0PzogYm9vbGVhbjsgLy8gV2hldGhlciBwcm92aWRlciBzdXBwb3J0cyBgcmVhc29uaW5nX2VmZm9ydGAgKGRlZmF1bHQ6IHRydWUpXG4gIHN1cHBvcnRzVXNhZ2VJblN0cmVhbWluZz86IGJvb2xlYW47IC8vIFdoZXRoZXIgcHJvdmlkZXIgc3VwcG9ydHMgYHN0cmVhbV9vcHRpb25zOiB7IGluY2x1ZGVfdXNhZ2U6IHRydWUgfWAgKGRlZmF1bHQ6IHRydWUpXG4gIHN1cHBvcnRzU3RyaWN0TW9kZT86IGJvb2xlYW47ICAgICAgLy8gV2hldGhlciBwcm92aWRlciBzdXBwb3J0cyBgc3RyaWN0YCBpbiB0b29sIGRlZmluaXRpb25zIChkZWZhdWx0OiB0cnVlKVxuICBtYXhUb2tlbnNGaWVsZD86ICdtYXhfY29tcGxldGlvbl90b2tlbnMnIHwgJ21heF90b2tlbnMnOyAgLy8gV2hpY2ggZmllbGQgbmFtZSB0byB1c2UgKGRlZmF1bHQ6IG1heF9jb21wbGV0aW9uX3Rva2VucylcbiAgcmVxdWlyZXNUb29sUmVzdWx0TmFtZT86IGJvb2xlYW47ICAvLyBXaGV0aGVyIHRvb2wgcmVzdWx0cyByZXF1aXJlIHRoZSBgbmFtZWAgZmllbGQgKGRlZmF1bHQ6IGZhbHNlKVxuICByZXF1aXJlc0Fzc2lzdGFudEFmdGVyVG9vbFJlc3VsdD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG9vbCByZXN1bHRzIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gYXNzaXN0YW50IG1lc3NhZ2UgKGRlZmF1bHQ6IGZhbHNlKVxuICByZXF1aXJlc1RoaW5raW5nQXNUZXh0PzogYm9vbGVhbjsgIC8vIFdoZXRoZXIgdGhpbmtpbmcgYmxvY2tzIG11c3QgYmUgY29udmVydGVkIHRvIHRleHQgKGRlZmF1bHQ6IGZhbHNlKVxuICByZXF1aXJlc01pc3RyYWxUb29sSWRzPzogYm9vbGVhbjsgIC8vIFdoZXRoZXIgdG9vbCBjYWxsIElEcyBtdXN0IGJlIG5vcm1hbGl6ZWQgdG8gTWlzdHJhbCBmb3JtYXQgKGRlZmF1bHQ6IGZhbHNlKVxuICB0aGlua2luZ0Zvcm1hdD86ICdvcGVuYWknIHwgJ3phaScgfCAncXdlbic7IC8vIEZvcm1hdCBmb3IgcmVhc29uaW5nIHBhcmFtOiAnb3BlbmFpJyB1c2VzIHJlYXNvbmluZ19lZmZvcnQsICd6YWknIHVzZXMgdGhpbmtpbmc6IHsgdHlwZTogXCJlbmFibGVkXCIgfSwgJ3F3ZW4nIHVzZXMgZW5hYmxlX3RoaW5raW5nOiBib29sZWFuIChkZWZhdWx0OiBvcGVuYWkpXG4gIG9wZW5Sb3V0ZXJSb3V0aW5nPzogT3BlblJvdXRlclJvdXRpbmc7IC8vIE9wZW5Sb3V0ZXIgcm91dGluZyBwcmVmZXJlbmNlcyAoZGVmYXVsdDoge30pXG4gIHZlcmNlbEdhdGV3YXlSb3V0aW5nPzogVmVyY2VsR2F0ZXdheVJvdXRpbmc7IC8vIFZlcmNlbCBBSSBHYXRld2F5IHJvdXRpbmcgcHJlZmVyZW5jZXMgKGRlZmF1bHQ6IHt9KVxufVxuXG5pbnRlcmZhY2UgT3BlbkFJUmVzcG9uc2VzQ29tcGF0IHtcbiAgLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Vcbn1cbmBgYFxuXG5JZiBgY29tcGF0YCBpcyBub3Qgc2V0LCB0aGUgbGlicmFyeSBmYWxscyBiYWNrIHRvIFVSTC1iYXNlZCBkZXRlY3Rpb24uIElmIGBjb21wYXRgIGlzIHBhcnRpYWxseSBzZXQsIHVuc3BlY2lmaWVkIGZpZWxkcyB1c2UgdGhlIGRldGVjdGVkIGRlZmF1bHRzLiBUaGlzIGlzIHVzZWZ1bCBmb3I6XG5cbi0gKipMaXRlTExNIHByb3hpZXMqKjogTWF5IG5vdCBzdXBwb3J0IGBzdG9yZWAgZmllbGRcbi0gKipDdXN0b20gaW5mZXJlbmNlIHNlcnZlcnMqKjogTWF5IHVzZSBub24tc3RhbmRhcmQgZmllbGQgbmFtZXNcbi0gKipTZWxmLWhvc3RlZCBlbmRwb2ludHMqKjogTWF5IGhhdmUgZGlmZmVyZW50IGZlYXR1cmUgc3VwcG9ydFxuXG4jIyMgVHlwZSBTYWZldHlcblxuTW9kZWxzIGFyZSB0eXBlZCBieSB0aGVpciBBUEksIHdoaWNoIGtlZXBzIHRoZSBtb2RlbCBtZXRhZGF0YSBhY2N1cmF0ZS4gUHJvdmlkZXItc3BlY2lmaWMgb3B0aW9uIHR5cGVzIGFyZSBlbmZvcmNlZCB3aGVuIHlvdSBjYWxsIHRoZSBwcm92aWRlciBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoZSBnZW5lcmljIGBzdHJlYW1gIGFuZCBgY29tcGxldGVgIGZ1bmN0aW9ucyBhY2NlcHQgYFN0cmVhbU9wdGlvbnNgIHdpdGggYWRkaXRpb25hbCBwcm92aWRlciBmaWVsZHMuXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IHN0cmVhbUFudGhyb3BpYywgdHlwZSBBbnRocm9waWNPcHRpb25zIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIFR5cGVTY3JpcHQga25vd3MgdGhpcyBpcyBhbiBBbnRocm9waWMgbW9kZWxcbmNvbnN0IGNsYXVkZSA9IGdldE1vZGVsKCdhbnRocm9waWMnLCAnY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0Jyk7XG5cbmNvbnN0IG9wdGlvbnM6IEFudGhyb3BpY09wdGlvbnMgPSB7XG4gIHRoaW5raW5nRW5hYmxlZDogdHJ1ZSxcbiAgdGhpbmtpbmdCdWRnZXRUb2tlbnM6IDIwNDhcbn07XG5cbmF3YWl0IHN0cmVhbUFudGhyb3BpYyhjbGF1ZGUsIGNvbnRleHQsIG9wdGlvbnMpO1xuYGBgXG5cbiMjIENyb3NzLVByb3ZpZGVyIEhhbmRvZmZzXG5cblRoZSBsaWJyYXJ5IHN1cHBvcnRzIHNlYW1sZXNzIGhhbmRvZmZzIGJldHdlZW4gZGlmZmVyZW50IExMTSBwcm92aWRlcnMgd2l0aGluIHRoZSBzYW1lIGNvbnZlcnNhdGlvbi4gVGhpcyBhbGxvd3MgeW91IHRvIHN3aXRjaCBtb2RlbHMgbWlkLWNvbnZlcnNhdGlvbiB3aGlsZSBwcmVzZXJ2aW5nIGNvbnRleHQsIGluY2x1ZGluZyB0aGlua2luZyBibG9ja3MsIHRvb2wgY2FsbHMsIGFuZCB0b29sIHJlc3VsdHMuXG5cbiMjIyBIb3cgSXQgV29ya3NcblxuV2hlbiBtZXNzYWdlcyBmcm9tIG9uZSBwcm92aWRlciBhcmUgc2VudCB0byBhIGRpZmZlcmVudCBwcm92aWRlciwgdGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSB0cmFuc2Zvcm1zIHRoZW0gZm9yIGNvbXBhdGliaWxpdHk6XG5cbi0gKipVc2VyIGFuZCB0b29sIHJlc3VsdCBtZXNzYWdlcyoqIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWRcbi0gKipBc3Npc3RhbnQgbWVzc2FnZXMgZnJvbSB0aGUgc2FtZSBwcm92aWRlci9BUEkqKiBhcmUgcHJlc2VydmVkIGFzLWlzXG4tICoqQXNzaXN0YW50IG1lc3NhZ2VzIGZyb20gZGlmZmVyZW50IHByb3ZpZGVycyoqIGhhdmUgdGhlaXIgdGhpbmtpbmcgYmxvY2tzIGNvbnZlcnRlZCB0byB0ZXh0IHdpdGggYDx0aGlua2luZz5gIHRhZ3Ncbi0gKipUb29sIGNhbGxzIGFuZCByZWd1bGFyIHRleHQqKiBhcmUgcHJlc2VydmVkIHVuY2hhbmdlZFxuXG4jIyMgRXhhbXBsZTogTXVsdGktUHJvdmlkZXIgQ29udmVyc2F0aW9uXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldE1vZGVsLCBjb21wbGV0ZSwgQ29udGV4dCB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBTdGFydCB3aXRoIENsYXVkZVxuY29uc3QgY2xhdWRlID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQnKTtcbmNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gIG1lc3NhZ2VzOiBbXVxufTtcblxuY29udGV4dC5tZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnV2hhdCBpcyAyNSAqIDE4PycgfSk7XG5jb25zdCBjbGF1ZGVSZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKGNsYXVkZSwgY29udGV4dCwge1xuICB0aGlua2luZ0VuYWJsZWQ6IHRydWVcbn0pO1xuY29udGV4dC5tZXNzYWdlcy5wdXNoKGNsYXVkZVJlc3BvbnNlKTtcblxuLy8gU3dpdGNoIHRvIEdQVC01IC0gaXQgd2lsbCBzZWUgQ2xhdWRlJ3MgdGhpbmtpbmcgYXMgPHRoaW5raW5nPiB0YWdnZWQgdGV4dFxuY29uc3QgZ3B0NSA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTUtbWluaScpO1xuY29udGV4dC5tZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnSXMgdGhhdCBjYWxjdWxhdGlvbiBjb3JyZWN0PycgfSk7XG5jb25zdCBncHRSZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKGdwdDUsIGNvbnRleHQpO1xuY29udGV4dC5tZXNzYWdlcy5wdXNoKGdwdFJlc3BvbnNlKTtcblxuLy8gU3dpdGNoIHRvIEdlbWluaVxuY29uc3QgZ2VtaW5pID0gZ2V0TW9kZWwoJ2dvb2dsZScsICdnZW1pbmktMi41LWZsYXNoJyk7XG5jb250ZXh0Lm1lc3NhZ2VzLnB1c2goeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdXaGF0IHdhcyB0aGUgb3JpZ2luYWwgcXVlc3Rpb24/JyB9KTtcbmNvbnN0IGdlbWluaVJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUoZ2VtaW5pLCBjb250ZXh0KTtcbmBgYFxuXG4jIyMgUHJvdmlkZXIgQ29tcGF0aWJpbGl0eVxuXG5BbGwgcHJvdmlkZXJzIGNhbiBoYW5kbGUgbWVzc2FnZXMgZnJvbSBvdGhlciBwcm92aWRlcnMsIGluY2x1ZGluZzpcbi0gVGV4dCBjb250ZW50XG4tIFRvb2wgY2FsbHMgYW5kIHRvb2wgcmVzdWx0cyAoaW5jbHVkaW5nIGltYWdlcyBpbiB0b29sIHJlc3VsdHMpXG4tIFRoaW5raW5nL3JlYXNvbmluZyBibG9ja3MgKHRyYW5zZm9ybWVkIHRvIHRhZ2dlZCB0ZXh0IGZvciBjcm9zcy1wcm92aWRlciBjb21wYXRpYmlsaXR5KVxuLSBBYm9ydGVkIG1lc3NhZ2VzIHdpdGggcGFydGlhbCBjb250ZW50XG5cblRoaXMgZW5hYmxlcyBmbGV4aWJsZSB3b3JrZmxvd3Mgd2hlcmUgeW91IGNhbjpcbi0gU3RhcnQgd2l0aCBhIGZhc3QgbW9kZWwgZm9yIGluaXRpYWwgcmVzcG9uc2VzXG4tIFN3aXRjaCB0byBhIG1vcmUgY2FwYWJsZSBtb2RlbCBmb3IgY29tcGxleCByZWFzb25pbmdcbi0gVXNlIHNwZWNpYWxpemVkIG1vZGVscyBmb3Igc3BlY2lmaWMgdGFza3Ncbi0gTWFpbnRhaW4gY29udmVyc2F0aW9uIGNvbnRpbnVpdHkgYWNyb3NzIHByb3ZpZGVyIG91dGFnZXNcblxuIyMgQ29udGV4dCBTZXJpYWxpemF0aW9uXG5cblRoZSBgQ29udGV4dGAgb2JqZWN0IGNhbiBiZSBlYXNpbHkgc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIHVzaW5nIHN0YW5kYXJkIEpTT04gbWV0aG9kcywgbWFraW5nIGl0IHNpbXBsZSB0byBwZXJzaXN0IGNvbnZlcnNhdGlvbnMsIGltcGxlbWVudCBjaGF0IGhpc3RvcnksIG9yIHRyYW5zZmVyIGNvbnRleHRzIGJldHdlZW4gc2VydmljZXM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IENvbnRleHQsIGdldE1vZGVsLCBjb21wbGV0ZSB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBDcmVhdGUgYW5kIHVzZSBhIGNvbnRleHRcbmNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gIHN5c3RlbVByb21wdDogJ1lvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC4nLFxuICBtZXNzYWdlczogW1xuICAgIHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnV2hhdCBpcyBUeXBlU2NyaXB0PycgfVxuICBdXG59O1xuXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQpO1xuY29udGV4dC5tZXNzYWdlcy5wdXNoKHJlc3BvbnNlKTtcblxuLy8gU2VyaWFsaXplIHRoZSBlbnRpcmUgY29udGV4dFxuY29uc3Qgc2VyaWFsaXplZCA9IEpTT04uc3RyaW5naWZ5KGNvbnRleHQpO1xuY29uc29sZS5sb2coJ1NlcmlhbGl6ZWQgY29udGV4dCBzaXplOicsIHNlcmlhbGl6ZWQubGVuZ3RoLCAnYnl0ZXMnKTtcblxuLy8gU2F2ZSB0byBkYXRhYmFzZSwgbG9jYWxTdG9yYWdlLCBmaWxlLCBldGMuXG5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY29udmVyc2F0aW9uJywgc2VyaWFsaXplZCk7XG5cbi8vIExhdGVyOiBkZXNlcmlhbGl6ZSBhbmQgY29udGludWUgdGhlIGNvbnZlcnNhdGlvblxuY29uc3QgcmVzdG9yZWQ6IENvbnRleHQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjb252ZXJzYXRpb24nKSEpO1xucmVzdG9yZWQubWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ1RlbGwgbWUgbW9yZSBhYm91dCBpdHMgdHlwZSBzeXN0ZW0nIH0pO1xuXG4vLyBDb250aW51ZSB3aXRoIGFueSBtb2RlbFxuY29uc3QgbmV3TW9kZWwgPSBnZXRNb2RlbCgnYW50aHJvcGljJywgJ2NsYXVkZS0zLTUtaGFpa3UtMjAyNDEwMjInKTtcbmNvbnN0IGNvbnRpbnVhdGlvbiA9IGF3YWl0IGNvbXBsZXRlKG5ld01vZGVsLCByZXN0b3JlZCk7XG5gYGBcblxuPiAqKk5vdGUqKjogSWYgdGhlIGNvbnRleHQgY29udGFpbnMgaW1hZ2VzIChlbmNvZGVkIGFzIGJhc2U2NCBhcyBzaG93biBpbiB0aGUgSW1hZ2UgSW5wdXQgc2VjdGlvbiksIHRob3NlIHdpbGwgYWxzbyBiZSBzZXJpYWxpemVkLlxuXG4jIyBCcm93c2VyIFVzYWdlXG5cblRoZSBsaWJyYXJ5IHN1cHBvcnRzIGJyb3dzZXIgZW52aXJvbm1lbnRzLiBZb3UgbXVzdCBwYXNzIHRoZSBBUEkga2V5IGV4cGxpY2l0bHkgc2luY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3QgYXZhaWxhYmxlIGluIGJyb3dzZXJzOlxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBnZXRNb2RlbCwgY29tcGxldGUgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcblxuLy8gQVBJIGtleSBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5IGluIGJyb3dzZXJcbmNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ2FudGhyb3BpYycsICdjbGF1ZGUtMy01LWhhaWt1LTIwMjQxMDIyJyk7XG5cbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIHtcbiAgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ0hlbGxvIScgfV1cbn0sIHtcbiAgYXBpS2V5OiAneW91ci1hcGkta2V5J1xufSk7XG5gYGBcblxuPiAqKlNlY3VyaXR5IFdhcm5pbmcqKjogRXhwb3NpbmcgQVBJIGtleXMgaW4gZnJvbnRlbmQgY29kZSBpcyBkYW5nZXJvdXMuIEFueW9uZSBjYW4gZXh0cmFjdCBhbmQgYWJ1c2UgeW91ciBrZXlzLiBPbmx5IHVzZSB0aGlzIGFwcHJvYWNoIGZvciBpbnRlcm5hbCB0b29scyBvciBkZW1vcy4gRm9yIHByb2R1Y3Rpb24gYXBwbGljYXRpb25zLCB1c2UgYSBiYWNrZW5kIHByb3h5IHRoYXQga2VlcHMgeW91ciBBUEkga2V5cyBzZWN1cmUuXG5cbiMjIyBFbnZpcm9ubWVudCBWYXJpYWJsZXMgKE5vZGUuanMgb25seSlcblxuSW4gTm9kZS5qcyBlbnZpcm9ubWVudHMsIHlvdSBjYW4gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBhdm9pZCBwYXNzaW5nIEFQSSBrZXlzOlxuXG58IFByb3ZpZGVyIHwgRW52aXJvbm1lbnQgVmFyaWFibGUocykgfFxufC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxufCBPcGVuQUkgfCBgT1BFTkFJX0FQSV9LRVlgIHxcbnwgQXp1cmUgT3BlbkFJIHwgYEFaVVJFX09QRU5BSV9BUElfS0VZYCArIGBBWlVSRV9PUEVOQUlfQkFTRV9VUkxgIG9yIGBBWlVSRV9PUEVOQUlfUkVTT1VSQ0VfTkFNRWAgKG9wdGlvbmFsIGBBWlVSRV9PUEVOQUlfQVBJX1ZFUlNJT05gLCBgQVpVUkVfT1BFTkFJX0RFUExPWU1FTlRfTkFNRV9NQVBgIGxpa2UgYG1vZGVsPWRlcGxveW1lbnQsbW9kZWwyPWRlcGxveW1lbnQyYCkgfFxufCBBbnRocm9waWMgfCBgQU5USFJPUElDX0FQSV9LRVlgIG9yIGBBTlRIUk9QSUNfT0FVVEhfVE9LRU5gIHxcbnwgR29vZ2xlIHwgYEdFTUlOSV9BUElfS0VZYCB8XG58IFZlcnRleCBBSSB8IGBHT09HTEVfQ0xPVURfUFJPSkVDVGAgKG9yIGBHQ0xPVURfUFJPSkVDVGApICsgYEdPT0dMRV9DTE9VRF9MT0NBVElPTmAgKyBBREMgfFxufCBNaXN0cmFsIHwgYE1JU1RSQUxfQVBJX0tFWWAgfFxufCBHcm9xIHwgYEdST1FfQVBJX0tFWWAgfFxufCBDZXJlYnJhcyB8IGBDRVJFQlJBU19BUElfS0VZYCB8XG58IHhBSSB8IGBYQUlfQVBJX0tFWWAgfFxufCBPcGVuUm91dGVyIHwgYE9QRU5ST1VURVJfQVBJX0tFWWAgfFxufCBWZXJjZWwgQUkgR2F0ZXdheSB8IGBBSV9HQVRFV0FZX0FQSV9LRVlgIHxcbnwgekFJIHwgYFpBSV9BUElfS0VZYCB8XG58IE1pbmlNYXggfCBgTUlOSU1BWF9BUElfS0VZYCB8XG58IEtpbWkgRm9yIENvZGluZyB8IGBLSU1JX0FQSV9LRVlgIHxcbnwgR2l0SHViIENvcGlsb3QgfCBgQ09QSUxPVF9HSVRIVUJfVE9LRU5gIG9yIGBHSF9UT0tFTmAgb3IgYEdJVEhVQl9UT0tFTmAgfFxuXG5XaGVuIHNldCwgdGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSB1c2VzIHRoZXNlIGtleXM6XG5cbmBgYHR5cGVzY3JpcHRcbi8vIFVzZXMgT1BFTkFJX0FQSV9LRVkgZnJvbSBlbnZpcm9ubWVudFxuY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnb3BlbmFpJywgJ2dwdC00by1taW5pJyk7XG5jb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCBjb250ZXh0KTtcblxuLy8gT3Igb3ZlcnJpZGUgd2l0aCBleHBsaWNpdCBrZXlcbmNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29tcGxldGUobW9kZWwsIGNvbnRleHQsIHtcbiAgYXBpS2V5OiAnc2stZGlmZmVyZW50LWtleSdcbn0pO1xuYGBgXG5cbiMjIyMgQW50aWdyYXZpdHkgVmVyc2lvbiBPdmVycmlkZVxuXG5TZXQgYFBJX0FJX0FOVElHUkFWSVRZX1ZFUlNJT05gIHRvIG92ZXJyaWRlIHRoZSBBbnRpZ3Jhdml0eSBVc2VyLUFnZW50IHZlcnNpb24gd2hlbiBHb29nbGUgdXBkYXRlcyB0aGVpciByZXF1aXJlbWVudHM6XG5cbmBgYGJhc2hcbmV4cG9ydCBQSV9BSV9BTlRJR1JBVklUWV9WRVJTSU9OPVwiMS4yMy4wXCJcbmBgYFxuXG4jIyMjIENhY2hlIFJldGVudGlvblxuXG5TZXQgYFBJX0NBQ0hFX1JFVEVOVElPTj1sb25nYCB0byBleHRlbmQgcHJvbXB0IGNhY2hlIHJldGVudGlvbjpcblxufCBQcm92aWRlciB8IERlZmF1bHQgfCBXaXRoIGBQSV9DQUNIRV9SRVRFTlRJT049bG9uZ2AgfFxufC0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG58IEFudGhyb3BpYyB8IDUgbWludXRlcyB8IDEgaG91ciB8XG58IE9wZW5BSSB8IGluLW1lbW9yeSB8IDI0IGhvdXJzIHxcblxuVGhpcyBvbmx5IGFmZmVjdHMgZGlyZWN0IEFQSSBjYWxscyB0byBgYXBpLmFudGhyb3BpYy5jb21gIGFuZCBgYXBpLm9wZW5haS5jb21gLiBQcm94aWVzIGFuZCBvdGhlciBwcm92aWRlcnMgYXJlIHVuYWZmZWN0ZWQuXG5cbj4gKipOb3RlKio6IEV4dGVuZGVkIGNhY2hlIHJldGVudGlvbiBtYXkgaW5jcmVhc2UgY29zdHMgZm9yIEFudGhyb3BpYyAoY2FjaGUgd3JpdGVzIGFyZSBjaGFyZ2VkIGF0IGEgaGlnaGVyIHJhdGUpLiBPcGVuQUkncyAyNGggcmV0ZW50aW9uIGhhcyBubyBhZGRpdGlvbmFsIGNvc3QuXG5cbiMjIyBDaGVja2luZyBFbnZpcm9ubWVudCBWYXJpYWJsZXNcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0RW52QXBpS2V5IH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIENoZWNrIGlmIGFuIEFQSSBrZXkgaXMgc2V0IGluIGVudmlyb25tZW50IHZhcmlhYmxlc1xuY29uc3Qga2V5ID0gZ2V0RW52QXBpS2V5KCdvcGVuYWknKTsgIC8vIGNoZWNrcyBPUEVOQUlfQVBJX0tFWVxuYGBgXG5cbiMjIE9BdXRoIFByb3ZpZGVyc1xuXG5TZXZlcmFsIHByb3ZpZGVycyByZXF1aXJlIE9BdXRoIGF1dGhlbnRpY2F0aW9uIGluc3RlYWQgb2Ygc3RhdGljIEFQSSBrZXlzOlxuXG4tICoqQW50aHJvcGljKiogKENsYXVkZSBQcm8vTWF4IHN1YnNjcmlwdGlvbilcbi0gKipPcGVuQUkgQ29kZXgqKiAoQ2hhdEdQVCBQbHVzL1BybyBzdWJzY3JpcHRpb24sIGFjY2VzcyB0byBHUFQtNS54IENvZGV4IG1vZGVscylcbi0gKipHaXRIdWIgQ29waWxvdCoqIChDb3BpbG90IHN1YnNjcmlwdGlvbilcbi0gKipHb29nbGUgR2VtaW5pIENMSSoqIChHZW1pbmkgMi4wLzIuNSB2aWEgR29vZ2xlIENsb3VkIENvZGUgQXNzaXN0OyBmcmVlIHRpZXIgb3IgcGFpZCBzdWJzY3JpcHRpb24pXG4tICoqQW50aWdyYXZpdHkqKiAoRnJlZSBHZW1pbmkgMywgQ2xhdWRlLCBHUFQtT1NTIHZpYSBHb29nbGUgQ2xvdWQpXG5cbkZvciBwYWlkIENsb3VkIENvZGUgQXNzaXN0IHN1YnNjcmlwdGlvbnMsIHNldCBgR09PR0xFX0NMT1VEX1BST0pFQ1RgIG9yIGBHT09HTEVfQ0xPVURfUFJPSkVDVF9JRGAgdG8geW91ciBwcm9qZWN0IElELlxuXG4jIyMgVmVydGV4IEFJIChBREMpXG5cblZlcnRleCBBSSBtb2RlbHMgdXNlIEFwcGxpY2F0aW9uIERlZmF1bHQgQ3JlZGVudGlhbHMgKEFEQyk6XG5cbi0gKipMb2NhbCBkZXZlbG9wbWVudCoqOiBSdW4gYGdjbG91ZCBhdXRoIGFwcGxpY2F0aW9uLWRlZmF1bHQgbG9naW5gXG4tICoqQ0kvUHJvZHVjdGlvbioqOiBTZXQgYEdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMU2AgdG8gcG9pbnQgdG8gYSBzZXJ2aWNlIGFjY291bnQgSlNPTiBrZXkgZmlsZVxuXG5BbHNvIHNldCBgR09PR0xFX0NMT1VEX1BST0pFQ1RgIChvciBgR0NMT1VEX1BST0pFQ1RgKSBhbmQgYEdPT0dMRV9DTE9VRF9MT0NBVElPTmAuIFlvdSBjYW4gYWxzbyBwYXNzIGBwcm9qZWN0YC9gbG9jYXRpb25gIGluIHRoZSBjYWxsIG9wdGlvbnMuXG5cbkV4YW1wbGU6XG5cbmBgYGJhc2hcbiMgTG9jYWwgKHVzZXMgeW91ciB1c2VyIGNyZWRlbnRpYWxzKVxuZ2Nsb3VkIGF1dGggYXBwbGljYXRpb24tZGVmYXVsdCBsb2dpblxuZXhwb3J0IEdPT0dMRV9DTE9VRF9QUk9KRUNUPVwibXktcHJvamVjdFwiXG5leHBvcnQgR09PR0xFX0NMT1VEX0xPQ0FUSU9OPVwidXMtY2VudHJhbDFcIlxuXG4jIENJL1Byb2R1Y3Rpb24gKHNlcnZpY2UgYWNjb3VudCBrZXkgZmlsZSlcbmV4cG9ydCBHT09HTEVfQVBQTElDQVRJT05fQ1JFREVOVElBTFM9XCIvcGF0aC90by9zZXJ2aWNlLWFjY291bnQuanNvblwiXG5gYGBcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0TW9kZWwsIGNvbXBsZXRlIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbihhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG1vZGVsID0gZ2V0TW9kZWwoJ2dvb2dsZS12ZXJ0ZXgnLCAnZ2VtaW5pLTIuNS1mbGFzaCcpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCB7XG4gICAgbWVzc2FnZXM6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogJ0hlbGxvIGZyb20gVmVydGV4IEFJJyB9XVxuICB9KTtcblxuICBmb3IgKGNvbnN0IGJsb2NrIG9mIHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gJ3RleHQnKSBjb25zb2xlLmxvZyhibG9jay50ZXh0KTtcbiAgfVxufSkoKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbmBgYFxuXG5PZmZpY2lhbCBkb2NzOiBbQXBwbGljYXRpb24gRGVmYXVsdCBDcmVkZW50aWFsc10oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2RvY3MvYXV0aGVudGljYXRpb24vYXBwbGljYXRpb24tZGVmYXVsdC1jcmVkZW50aWFscylcblxuIyMjIENMSSBMb2dpblxuXG5UaGUgcXVpY2tlc3Qgd2F5IHRvIGF1dGhlbnRpY2F0ZTpcblxuYGBgYmFzaFxubnB4IEBtYXJpb3plY2huZXIvcGktYWkgbG9naW4gICAgICAgICAgICAgICMgaW50ZXJhY3RpdmUgcHJvdmlkZXIgc2VsZWN0aW9uXG5ucHggQG1hcmlvemVjaG5lci9waS1haSBsb2dpbiBhbnRocm9waWMgICAgIyBsb2dpbiB0byBzcGVjaWZpYyBwcm92aWRlclxubnB4IEBtYXJpb3plY2huZXIvcGktYWkgbGlzdCAgICAgICAgICAgICAgICMgbGlzdCBhdmFpbGFibGUgcHJvdmlkZXJzXG5gYGBcblxuQ3JlZGVudGlhbHMgYXJlIHNhdmVkIHRvIGBhdXRoLmpzb25gIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS5cblxuIyMjIFByb2dyYW1tYXRpYyBPQXV0aFxuXG5UaGUgbGlicmFyeSBwcm92aWRlcyBsb2dpbiBhbmQgdG9rZW4gcmVmcmVzaCBmdW5jdGlvbnMuIENyZWRlbnRpYWwgc3RvcmFnZSBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuXG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7XG4gIC8vIExvZ2luIGZ1bmN0aW9ucyAocmV0dXJuIGNyZWRlbnRpYWxzLCBkbyBub3Qgc3RvcmUpXG4gIGxvZ2luQW50aHJvcGljLFxuICBsb2dpbk9wZW5BSUNvZGV4LFxuICBsb2dpbkdpdEh1YkNvcGlsb3QsXG4gIGxvZ2luR2VtaW5pQ2xpLFxuICBsb2dpbkFudGlncmF2aXR5LFxuXG4gIC8vIFRva2VuIG1hbmFnZW1lbnRcbiAgcmVmcmVzaE9BdXRoVG9rZW4sICAgLy8gKHByb3ZpZGVyLCBjcmVkZW50aWFscykgPT4gbmV3IGNyZWRlbnRpYWxzXG4gIGdldE9BdXRoQXBpS2V5LCAgICAgIC8vIChwcm92aWRlciwgY3JlZGVudGlhbHNNYXApID0+IHsgbmV3Q3JlZGVudGlhbHMsIGFwaUtleSB9IHwgbnVsbFxuXG4gIC8vIFR5cGVzXG4gIHR5cGUgT0F1dGhQcm92aWRlciwgIC8vICdhbnRocm9waWMnIHwgJ29wZW5haS1jb2RleCcgfCAnZ2l0aHViLWNvcGlsb3QnIHwgJ2dvb2dsZS1nZW1pbmktY2xpJyB8ICdnb29nbGUtYW50aWdyYXZpdHknXG4gIHR5cGUgT0F1dGhDcmVkZW50aWFscyxcbn0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5gYGBcblxuIyMjIExvZ2luIEZsb3cgRXhhbXBsZVxuXG5gYGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBsb2dpbkdpdEh1YkNvcGlsb3QgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5cbmNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgbG9naW5HaXRIdWJDb3BpbG90KHtcbiAgb25BdXRoOiAodXJsLCBpbnN0cnVjdGlvbnMpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgT3BlbjogJHt1cmx9YCk7XG4gICAgaWYgKGluc3RydWN0aW9ucykgY29uc29sZS5sb2coaW5zdHJ1Y3Rpb25zKTtcbiAgfSxcbiAgb25Qcm9tcHQ6IGFzeW5jIChwcm9tcHQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgZ2V0VXNlcklucHV0KHByb21wdC5tZXNzYWdlKTtcbiAgfSxcbiAgb25Qcm9ncmVzczogKG1lc3NhZ2UpID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UpXG59KTtcblxuLy8gU3RvcmUgY3JlZGVudGlhbHMgeW91cnNlbGZcbmNvbnN0IGF1dGggPSB7ICdnaXRodWItY29waWxvdCc6IHsgdHlwZTogJ29hdXRoJywgLi4uY3JlZGVudGlhbHMgfSB9O1xud3JpdGVGaWxlU3luYygnYXV0aC5qc29uJywgSlNPTi5zdHJpbmdpZnkoYXV0aCwgbnVsbCwgMikpO1xuYGBgXG5cbiMjIyBVc2luZyBPQXV0aCBUb2tlbnNcblxuVXNlIGBnZXRPQXV0aEFwaUtleSgpYCB0byBnZXQgYW4gQVBJIGtleSwgYXV0b21hdGljYWxseSByZWZyZXNoaW5nIGlmIGV4cGlyZWQ6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldE1vZGVsLCBjb21wbGV0ZSwgZ2V0T0F1dGhBcGlLZXkgfSBmcm9tICdAbWFyaW96ZWNobmVyL3BpLWFpJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcblxuLy8gTG9hZCB5b3VyIHN0b3JlZCBjcmVkZW50aWFsc1xuY29uc3QgYXV0aCA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKCdhdXRoLmpzb24nLCAndXRmLTgnKSk7XG5cbi8vIEdldCBBUEkga2V5IChyZWZyZXNoZXMgaWYgZXhwaXJlZClcbmNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldE9BdXRoQXBpS2V5KCdnaXRodWItY29waWxvdCcsIGF1dGgpO1xuaWYgKCFyZXN1bHQpIHRocm93IG5ldyBFcnJvcignTm90IGxvZ2dlZCBpbicpO1xuXG4vLyBTYXZlIHJlZnJlc2hlZCBjcmVkZW50aWFsc1xuYXV0aFsnZ2l0aHViLWNvcGlsb3QnXSA9IHsgdHlwZTogJ29hdXRoJywgLi4ucmVzdWx0Lm5ld0NyZWRlbnRpYWxzIH07XG53cml0ZUZpbGVTeW5jKCdhdXRoLmpzb24nLCBKU09OLnN0cmluZ2lmeShhdXRoLCBudWxsLCAyKSk7XG5cbi8vIFVzZSB0aGUgQVBJIGtleVxuY29uc3QgbW9kZWwgPSBnZXRNb2RlbCgnZ2l0aHViLWNvcGlsb3QnLCAnZ3B0LTRvJyk7XG5jb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbXBsZXRlKG1vZGVsLCB7XG4gIG1lc3NhZ2VzOiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdIZWxsbyEnIH1dXG59LCB7IGFwaUtleTogcmVzdWx0LmFwaUtleSB9KTtcbmBgYFxuXG4jIyMgUHJvdmlkZXIgTm90ZXNcblxuKipPcGVuQUkgQ29kZXgqKjogUmVxdWlyZXMgYSBDaGF0R1BUIFBsdXMgb3IgUHJvIHN1YnNjcmlwdGlvbi4gUHJvdmlkZXMgYWNjZXNzIHRvIEdQVC01LnggQ29kZXggbW9kZWxzIHdpdGggZXh0ZW5kZWQgY29udGV4dCB3aW5kb3dzIGFuZCByZWFzb25pbmcgY2FwYWJpbGl0aWVzLiBUaGUgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgc2Vzc2lvbi1iYXNlZCBwcm9tcHQgY2FjaGluZyB3aGVuIGBzZXNzaW9uSWRgIGlzIHByb3ZpZGVkIGluIHN0cmVhbSBvcHRpb25zLiBZb3UgY2FuIHNldCBgdHJhbnNwb3J0YCBpbiBzdHJlYW0gb3B0aW9ucyB0byBgXCJzc2VcImAsIGBcIndlYnNvY2tldFwiYCwgb3IgYFwiYXV0b1wiYCBmb3IgQ29kZXggUmVzcG9uc2VzIHRyYW5zcG9ydCBzZWxlY3Rpb24uIFdoZW4gdXNpbmcgV2ViU29ja2V0IHdpdGggYSBgc2Vzc2lvbklkYCwgY29ubmVjdGlvbnMgYXJlIHJldXNlZCBwZXIgc2Vzc2lvbiBhbmQgZXhwaXJlIGFmdGVyIDUgbWludXRlcyBvZiBpbmFjdGl2aXR5LlxuXG4qKkF6dXJlIE9wZW5BSSAoUmVzcG9uc2VzKSoqOiBVc2VzIHRoZSBSZXNwb25zZXMgQVBJIG9ubHkuIFNldCBgQVpVUkVfT1BFTkFJX0FQSV9LRVlgIGFuZCBlaXRoZXIgYEFaVVJFX09QRU5BSV9CQVNFX1VSTGAgb3IgYEFaVVJFX09QRU5BSV9SRVNPVVJDRV9OQU1FYC4gVXNlIGBBWlVSRV9PUEVOQUlfQVBJX1ZFUlNJT05gIChkZWZhdWx0cyB0byBgdjFgKSB0byBvdmVycmlkZSB0aGUgQVBJIHZlcnNpb24gaWYgbmVlZGVkLiBEZXBsb3ltZW50IG5hbWVzIGFyZSB0cmVhdGVkIGFzIG1vZGVsIElEcyBieSBkZWZhdWx0LCBvdmVycmlkZSB3aXRoIGBhenVyZURlcGxveW1lbnROYW1lYCBvciBgQVpVUkVfT1BFTkFJX0RFUExPWU1FTlRfTkFNRV9NQVBgIHVzaW5nIGNvbW1hLXNlcGFyYXRlZCBgbW9kZWwtaWQ9ZGVwbG95bWVudGAgcGFpcnMgKGZvciBleGFtcGxlIGBncHQtNG8tbWluaT1teS1kZXBsb3ltZW50LGdwdC00bz1wcm9kYCkuIExlZ2FjeSBkZXBsb3ltZW50LWJhc2VkIFVSTHMgYXJlIGludGVudGlvbmFsbHkgdW5zdXBwb3J0ZWQuXG5cbioqR2l0SHViIENvcGlsb3QqKjogSWYgeW91IGdldCBcIlRoZSByZXF1ZXN0ZWQgbW9kZWwgaXMgbm90IHN1cHBvcnRlZFwiIGVycm9yLCBlbmFibGUgdGhlIG1vZGVsIG1hbnVhbGx5IGluIFZTIENvZGU6IG9wZW4gQ29waWxvdCBDaGF0LCBjbGljayB0aGUgbW9kZWwgc2VsZWN0b3IsIHNlbGVjdCB0aGUgbW9kZWwgKHdhcm5pbmcgaWNvbiksIGFuZCBjbGljayBcIkVuYWJsZVwiLlxuXG4qKkdvb2dsZSBHZW1pbmkgQ0xJIC8gQW50aWdyYXZpdHkqKjogVGhlc2UgdXNlIEdvb2dsZSBDbG91ZCBPQXV0aC4gVGhlIGBhcGlLZXlgIHJldHVybmVkIGJ5IGBnZXRPQXV0aEFwaUtleSgpYCBpcyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgYm90aCB0aGUgdG9rZW4gYW5kIHByb2plY3QgSUQsIHdoaWNoIHRoZSBsaWJyYXJ5IGhhbmRsZXMgYXV0b21hdGljYWxseS5cblxuIyMgRGV2ZWxvcG1lbnRcblxuIyMjIEFkZGluZyBhIE5ldyBQcm92aWRlclxuXG5BZGRpbmcgYSBuZXcgTExNIHByb3ZpZGVyIHJlcXVpcmVzIGNoYW5nZXMgYWNyb3NzIG11bHRpcGxlIGZpbGVzLiBUaGlzIGNoZWNrbGlzdCBjb3ZlcnMgYWxsIG5lY2Vzc2FyeSBzdGVwczpcblxuIyMjIyAxLiBDb3JlIFR5cGVzIChgc3JjL3R5cGVzLnRzYClcblxuLSBBZGQgdGhlIEFQSSBpZGVudGlmaWVyIHRvIGBLbm93bkFwaWAgKGZvciBleGFtcGxlIGBcImJlZHJvY2stY29udmVyc2Utc3RyZWFtXCJgKVxuLSBDcmVhdGUgYW4gb3B0aW9ucyBpbnRlcmZhY2UgZXh0ZW5kaW5nIGBTdHJlYW1PcHRpb25zYCAoZm9yIGV4YW1wbGUgYEJlZHJvY2tPcHRpb25zYClcbi0gQWRkIHRoZSBwcm92aWRlciBuYW1lIHRvIGBLbm93blByb3ZpZGVyYCAoZm9yIGV4YW1wbGUgYFwiYW1hem9uLWJlZHJvY2tcImApXG5cbiMjIyMgMi4gUHJvdmlkZXIgSW1wbGVtZW50YXRpb24gKGBzcmMvcHJvdmlkZXJzL2ApXG5cbkNyZWF0ZSBhIG5ldyBwcm92aWRlciBmaWxlIChmb3IgZXhhbXBsZSBgYW1hem9uLWJlZHJvY2sudHNgKSB0aGF0IGV4cG9ydHM6XG5cbi0gYHN0cmVhbTxQcm92aWRlcj4oKWAgZnVuY3Rpb24gcmV0dXJuaW5nIGBBc3Npc3RhbnRNZXNzYWdlRXZlbnRTdHJlYW1gXG4tIGBzdHJlYW1TaW1wbGU8UHJvdmlkZXI+KClgIGZvciBgU2ltcGxlU3RyZWFtT3B0aW9uc2AgbWFwcGluZ1xuLSBQcm92aWRlci1zcGVjaWZpYyBvcHRpb25zIGludGVyZmFjZVxuLSBNZXNzYWdlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIHRyYW5zZm9ybSBgQ29udGV4dGAgdG8gcHJvdmlkZXIgZm9ybWF0XG4tIFRvb2wgY29udmVyc2lvbiBpZiB0aGUgcHJvdmlkZXIgc3VwcG9ydHMgdG9vbHNcbi0gUmVzcG9uc2UgcGFyc2luZyB0byBlbWl0IHN0YW5kYXJkaXplZCBldmVudHMgKGB0ZXh0YCwgYHRvb2xfY2FsbGAsIGB0aGlua2luZ2AsIGB1c2FnZWAsIGBzdG9wYClcblxuIyMjIyAzLiBBUEkgUmVnaXN0cnkgSW50ZWdyYXRpb24gKGBzcmMvcHJvdmlkZXJzL3JlZ2lzdGVyLWJ1aWx0aW5zLnRzYClcblxuLSBSZWdpc3RlciB0aGUgQVBJIHdpdGggYHJlZ2lzdGVyQXBpUHJvdmlkZXIoKWBcbi0gQWRkIGNyZWRlbnRpYWwgZGV0ZWN0aW9uIGluIGBlbnYtYXBpLWtleXMudHNgIGZvciB0aGUgbmV3IHByb3ZpZGVyXG4tIEVuc3VyZSBgc3RyZWFtU2ltcGxlYCBoYW5kbGVzIGF1dGggbG9va3VwIHZpYSBgZ2V0RW52QXBpS2V5KClgIG9yIHByb3ZpZGVyLXNwZWNpZmljIGF1dGhcblxuIyMjIyA0LiBNb2RlbCBHZW5lcmF0aW9uIChgc2NyaXB0cy9nZW5lcmF0ZS1tb2RlbHMudHNgKVxuXG4tIEFkZCBsb2dpYyB0byBmZXRjaCBhbmQgcGFyc2UgbW9kZWxzIGZyb20gdGhlIHByb3ZpZGVyJ3Mgc291cmNlIChlLmcuLCBtb2RlbHMuZGV2IEFQSSlcbi0gTWFwIHByb3ZpZGVyIG1vZGVsIGRhdGEgdG8gdGhlIHN0YW5kYXJkaXplZCBgTW9kZWxgIGludGVyZmFjZVxuLSBIYW5kbGUgcHJvdmlkZXItc3BlY2lmaWMgcXVpcmtzIChwcmljaW5nIGZvcm1hdCwgY2FwYWJpbGl0eSBmbGFncywgbW9kZWwgSUQgdHJhbnNmb3JtYXRpb25zKVxuXG4jIyMjIDUuIFRlc3RzIChgdGVzdC9gKVxuXG5DcmVhdGUgb3IgdXBkYXRlIHRlc3QgZmlsZXMgdG8gY292ZXIgdGhlIG5ldyBwcm92aWRlcjpcblxuLSBgc3RyZWFtLnRlc3QudHNgIC0gQmFzaWMgc3RyZWFtaW5nIGFuZCB0b29sIHVzZVxuLSBgdG9rZW5zLnRlc3QudHNgIC0gVG9rZW4gdXNhZ2UgcmVwb3J0aW5nXG4tIGBhYm9ydC50ZXN0LnRzYCAtIFJlcXVlc3QgY2FuY2VsbGF0aW9uXG4tIGBlbXB0eS50ZXN0LnRzYCAtIEVtcHR5IG1lc3NhZ2UgaGFuZGxpbmdcbi0gYGNvbnRleHQtb3ZlcmZsb3cudGVzdC50c2AgLSBDb250ZXh0IGxpbWl0IGVycm9yc1xuLSBgaW1hZ2UtbGltaXRzLnRlc3QudHNgIC0gSW1hZ2Ugc3VwcG9ydCAoaWYgYXBwbGljYWJsZSlcbi0gYHVuaWNvZGUtc3Vycm9nYXRlLnRlc3QudHNgIC0gVW5pY29kZSBoYW5kbGluZ1xuLSBgdG9vbC1jYWxsLXdpdGhvdXQtcmVzdWx0LnRlc3QudHNgIC0gT3JwaGFuZWQgdG9vbCBjYWxsc1xuLSBgaW1hZ2UtdG9vbC1yZXN1bHQudGVzdC50c2AgLSBJbWFnZXMgaW4gdG9vbCByZXN1bHRzXG4tIGB0b3RhbC10b2tlbnMudGVzdC50c2AgLSBUb2tlbiBjb3VudGluZyBhY2N1cmFjeVxuLSBgY3Jvc3MtcHJvdmlkZXItaGFuZG9mZi50ZXN0LnRzYCAtIENyb3NzLXByb3ZpZGVyIGNvbnRleHQgcmVwbGF5XG5cbkZvciBgY3Jvc3MtcHJvdmlkZXItaGFuZG9mZi50ZXN0LnRzYCwgYWRkIGF0IGxlYXN0IG9uZSBwcm92aWRlci9tb2RlbCBwYWlyLiBJZiB0aGUgcHJvdmlkZXIgZXhwb3NlcyBtdWx0aXBsZSBtb2RlbCBmYW1pbGllcyAoZm9yIGV4YW1wbGUgR1BUIGFuZCBDbGF1ZGUpLCBhZGQgYXQgbGVhc3Qgb25lIHBhaXIgcGVyIGZhbWlseS5cblxuRm9yIHByb3ZpZGVycyB3aXRoIG5vbi1zdGFuZGFyZCBhdXRoIChBV1MsIEdvb2dsZSBWZXJ0ZXgpLCBjcmVhdGUgYSB1dGlsaXR5IGxpa2UgYGJlZHJvY2stdXRpbHMudHNgIHdpdGggY3JlZGVudGlhbCBkZXRlY3Rpb24gaGVscGVycy5cblxuIyMjIyA2LiBDb2RpbmcgQWdlbnQgSW50ZWdyYXRpb24gKGAuLi9jb2RpbmctYWdlbnQvYClcblxuVXBkYXRlIGBzcmMvY29yZS9tb2RlbC1yZXNvbHZlci50c2A6XG5cbi0gQWRkIGEgZGVmYXVsdCBtb2RlbCBJRCBmb3IgdGhlIHByb3ZpZGVyIGluIGBERUZBVUxUX01PREVMU2BcblxuVXBkYXRlIGBzcmMvY2xpL2FyZ3MudHNgOlxuXG4tIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBkb2N1bWVudGF0aW9uIGluIHRoZSBoZWxwIHRleHRcblxuVXBkYXRlIGBSRUFETUUubWRgOlxuXG4tIEFkZCB0aGUgcHJvdmlkZXIgdG8gdGhlIHByb3ZpZGVycyBzZWN0aW9uIHdpdGggc2V0dXAgaW5zdHJ1Y3Rpb25zXG5cbiMjIyMgNy4gRG9jdW1lbnRhdGlvblxuXG5VcGRhdGUgYHBhY2thZ2VzL2FpL1JFQURNRS5tZGA6XG5cbi0gQWRkIHRvIHRoZSBTdXBwb3J0ZWQgUHJvdmlkZXJzIHRhYmxlXG4tIERvY3VtZW50IGFueSBwcm92aWRlci1zcGVjaWZpYyBvcHRpb25zIG9yIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVtZW50c1xuLSBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIEVudmlyb25tZW50IFZhcmlhYmxlcyBzZWN0aW9uXG5cbiMjIyMgOC4gQ2hhbmdlbG9nXG5cbkFkZCBhbiBlbnRyeSB0byBgcGFja2FnZXMvYWkvQ0hBTkdFTE9HLm1kYCB1bmRlciBgIyMgW1VucmVsZWFzZWRdYDpcblxuYGBgbWFya2Rvd25cbiMjIyBBZGRlZFxuLSBBZGRlZCBzdXBwb3J0IGZvciBbUHJvdmlkZXIgTmFtZV0gcHJvdmlkZXIgKFsjUFJdKGxpbmspIGJ5IFtAYXV0aG9yXShsaW5rKSlcbmBgYFxuXG4jIyBMaWNlbnNlXG5cbk1JVFxuXG5gYGBcbiJ9XSwiZGV0YWlscyI6eyJvd25lciI6ImJhZGxvZ2ljIiwicmVwbyI6InBpLW1vbm8iLCJwYXRoIjoicGFja2FnZXMvYWkvUkVBRE1FLm1kIiwicmVmIjpudWxsLCJjb250ZW50VHlwZSI6ImZpbGUiLCJfX21ldGEiOnsidGltaW5nIjp7InN0YXJ0ZWRBdCI6MTc3MTM0NzUyMzgwMSwiZW5kZWRBdCI6MTc3MTM0NzUyNDI0NSwiZHVyYXRpb25NcyI6NDQ0fX19fSwiZW5kZWRBdCI6MTc3MTM0NzUyNDI0NiwiZHVyYXRpb25NcyI6NDQxfV0sInJlc3BvbnNlIjoiUGVyZmVjdCEgTm93IEkgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZC4gTGV0IG1lIGNvbXBpbGUgYSBjb21wcmVoZW5zaXZlIGFuc3dlci5cblxuIyMgU3VtbWFyeVxuXG5JJ3ZlIGZvdW5kIHRoZSBjb21wbGV0ZSBzb2x1dGlvbiBmb3IgZ2V0dGluZyB0aGUgbGlzdCBvZiBrbm93biBwcm92aWRlcnMgcHJvZ3JhbW1hdGljYWxseSBpbiB0aGUgYmFkbG9naWMvcGktbW9ubyByZXBvc2l0b3J5LiBIZXJlJ3Mgd2hhdCB5b3UgbmVlZCB0byBrbm93OlxuXG4jIyMgKipNYWluIEZ1bmN0aW9uOiBgZ2V0UHJvdmlkZXJzKClgKipcblxuVGhlIHByaW1hcnkgd2F5IHRvIGdldCB0aGUgbGlzdCBvZiBrbm93biBwcm92aWRlcnMgaXMgdGhyb3VnaCB0aGUgKipgZ2V0UHJvdmlkZXJzKClgKiogZnVuY3Rpb24gZXhwb3J0ZWQgZnJvbSB0aGUgYEBtYXJpb3plY2huZXIvcGktYWlgIHBhY2thZ2UuXG5cbioqTG9jYXRpb24qKjogW2BwYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzYF0oaHR0cHM6Ly9naXRodWIuY29tL2JhZGxvZ2ljL3BpLW1vbm8vYmxvYi9tYWluL3BhY2thZ2VzL2FpL3NyYy9tb2RlbHMudHMpXG5cbmBgYHR5cGVzY3JpcHRcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlcnMoKTogS25vd25Qcm92aWRlcltdIHtcblx0cmV0dXJuIEFycmF5LmZyb20obW9kZWxSZWdpc3RyeS5rZXlzKCkpIGFzIEtub3duUHJvdmlkZXJbXTtcbn1cbmBgYFxuXG4jIyMgKipFeHBvcnQgUGF0aCoqXG5cblRoZSBmdW5jdGlvbiBpcyBleHBvcnRlZCB0aHJvdWdoIHRoZSBtYWluIHBhY2thZ2UgZW50cnkgcG9pbnQ6XG4tICoqRmlsZSoqOiBbYHBhY2thZ2VzL2FpL3NyYy9pbmRleC50c2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvaW5kZXgudHMpXG4tICoqRXhwb3J0Kio6IGBleHBvcnQgKiBmcm9tIFwiLi9tb2RlbHMuanNcImBcblxuIyMjICoqSW1wb3J0IFVzYWdlKipcblxuYGBgdHlwZXNjcmlwdFxuaW1wb3J0IHsgZ2V0UHJvdmlkZXJzIH0gZnJvbSAnQG1hcmlvemVjaG5lci9waS1haSc7XG5cbi8vIEdldCBhbGwgYXZhaWxhYmxlIHByb3ZpZGVyc1xuY29uc3QgcHJvdmlkZXJzID0gZ2V0UHJvdmlkZXJzKCk7XG5jb25zb2xlLmxvZyhwcm92aWRlcnMpOyBcbi8vIFsnb3BlbmFpJywgJ2FudGhyb3BpYycsICdnb29nbGUnLCAneGFpJywgJ2dyb3EnLCAuLi5dXG5gYGBcblxuIyMjICoqS25vd25Qcm92aWRlciBUeXBlKipcblxuQWxsIHBvc3NpYmxlIHByb3ZpZGVyIG5hbWVzIGFyZSBkZWZpbmVkIGluIHRoZSBgS25vd25Qcm92aWRlcmAgdW5pb24gdHlwZSBpbiBbYHBhY2thZ2VzL2FpL3NyYy90eXBlcy50c2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvdHlwZXMudHMpOlxuXG5gYGB0eXBlc2NyaXB0XG5leHBvcnQgdHlwZSBLbm93blByb3ZpZGVyID1cblx0fCBcImFtYXpvbi1iZWRyb2NrXCJcblx0fCBcImFudGhyb3BpY1wiXG5cdHwgXCJnb29nbGVcIlxuXHR8IFwiZ29vZ2xlLWdlbWluaS1jbGlcIlxuXHR8IFwiZ29vZ2xlLWFudGlncmF2aXR5XCJcblx0fCBcImdvb2dsZS12ZXJ0ZXhcIlxuXHR8IFwib3BlbmFpXCJcblx0fCBcImF6dXJlLW9wZW5haS1yZXNwb25zZXNcIlxuXHR8IFwib3BlbmFpLWNvZGV4XCJcblx0fCBcImdpdGh1Yi1jb3BpbG90XCJcblx0fCBcInhhaVwiXG5cdHwgXCJncm9xXCJcblx0fCBcImNlcmVicmFzXCJcblx0fCBcIm9wZW5yb3V0ZXJcIlxuXHR8IFwidmVyY2VsLWFpLWdhdGV3YXlcIlxuXHR8IFwiemFpXCJcblx0fCBcIm1pc3RyYWxcIlxuXHR8IFwibWluaW1heFwiXG5cdHwgXCJtaW5pbWF4LWNuXCJcblx0fCBcImh1Z2dpbmdmYWNlXCJcblx0fCBcIm9wZW5jb2RlXCJcblx0fCBcImtpbWktY29kaW5nXCI7XG5gYGBcblxuIyMjICoqUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5UaGUgbGlicmFyeSBhbHNvIHByb3ZpZGVzIGNvbXBhbmlvbiBmdW5jdGlvbnMgdG8gcXVlcnkgcHJvdmlkZXJzIGFuZCBtb2RlbHM6XG5cbmBgYHR5cGVzY3JpcHRcbmltcG9ydCB7IGdldFByb3ZpZGVycywgZ2V0TW9kZWxzLCBnZXRNb2RlbCB9IGZyb20gJ0BtYXJpb3plY2huZXIvcGktYWknO1xuXG4vLyBHZXQgYWxsIHByb3ZpZGVyc1xuY29uc3QgcHJvdmlkZXJzID0gZ2V0UHJvdmlkZXJzKCk7XG5cbi8vIEdldCBhbGwgbW9kZWxzIGZyb20gYSBzcGVjaWZpYyBwcm92aWRlciAoZnVsbHkgdHlwZWQpXG5jb25zdCBhbnRocm9waWNNb2RlbHMgPSBnZXRNb2RlbHMoJ2FudGhyb3BpYycpO1xuZm9yIChjb25zdCBtb2RlbCBvZiBhbnRocm9waWNNb2RlbHMpIHtcbiAgY29uc29sZS5sb2coYCR7bW9kZWwuaWR9OiAke21vZGVsLm5hbWV9YCk7XG4gIGNvbnNvbGUubG9nKGAgIENvbnRleHQ6ICR7bW9kZWwuY29udGV4dFdpbmRvd30gdG9rZW5zYCk7XG4gIGNvbnNvbGUubG9nKGAgIFN1cHBvcnRzIHJlYXNvbmluZzogJHttb2RlbC5yZWFzb25pbmd9YCk7XG59XG5cbi8vIEdldCBhIHNwZWNpZmljIG1vZGVsXG5jb25zdCBtb2RlbCA9IGdldE1vZGVsKCdvcGVuYWknLCAnZ3B0LTRvLW1pbmknKTtcbmBgYFxuXG4jIyMgKipIb3cgSXQgV29ya3MgSW50ZXJuYWxseSoqXG5cblRoZSBgZ2V0UHJvdmlkZXJzKClgIGZ1bmN0aW9uIHJldHVybnMgZGF0YSBmcm9tIHRoZSBgbW9kZWxSZWdpc3RyeWAgbWFwLCB3aGljaCBpcyBpbml0aWFsaXplZCBhdCBtb2R1bGUgbG9hZCB0aW1lIGZyb20gYE1PREVMU2AgY29uc3RhbnQgKGdlbmVyYXRlZCBmcm9tIGBtb2RlbHMuZ2VuZXJhdGVkLnRzYCkuIFRoaXMgZW5zdXJlcyB0aGUgbGlzdCBpcyBkeW5hbWljIGFuZCByZWZsZWN0cyB0aGUgYWN0dWFsIGF2YWlsYWJsZSBwcm92aWRlcnMgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi5cblxuLS0tXG5cbioqU291cmNlKio6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRsb2dpYy9waS1tb25vL2Jsb2IvbWFpbi9wYWNrYWdlcy9haS9zcmMvbW9kZWxzLnRzIiwidXNhZ2UiOnsiaW5wdXRUb2tlbnMiOjUxNTY1LCJvdXRwdXRUb2tlbnMiOjE4MTIsImNhY2hlUmVhZFRva2VucyI6MjcxNjksImNhY2hlV3JpdGVUb2tlbnMiOjAsImVzdGltYXRlZFRva2VucyI6ODA1NDYsImxsbUNvc3QiOjAuMDYzMzQxODk5OTk5OTk5OTksInRvb2xDb3N0IjowLCJ0b3RhbENvc3QiOjAuMDYzMzQxODk5OTk5OTk5OTl9LCJyZXNvbHZlZE1vZGVsIjp7InByb3ZpZGVyIjoib3BlbnJvdXRlciIsImlkIjoiYW50aHJvcGljL2NsYXVkZS1oYWlrdS00LjUifSwidG90YWxEdXJhdGlvbk1zIjozMjY2OH0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDc1MzQ5MzZ9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlIChiYXNoKSJ9LCJpZCI6ImYzYzUxMjU4IiwicGFyZW50SWQiOiIwZjAzOGUwNiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTg6NTkuNzY2WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjNkMjU4MWM5IiwicGFyZW50SWQiOiJmM2M1MTI1OCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTg6NTkuNzY3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImBnZXRQcm92aWRlcnMoKWAgZnJvbSBgQG1hcmlvemVjaG5lci9waS1haWAgaXMgdGhlIGFuc3dlci4gTGV0IG1lIHZlcmlmeSBpdCdzIGFjY2Vzc2libGU6In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6InRvb2x1XzAxMVRyQmZwck5mZnNlQkNBRlJOVG9IZyIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJjZCAvVXNlcnMvYWxpb3VkaWFsbG8vY29kZS9zcmMvZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZSAmJiBub2RlIC1lIFwiY29uc3QgeyBnZXRQcm92aWRlcnMgfSA9IHJlcXVpcmUoJ0BtYXJpb3plY2huZXIvcGktYWknKTsgY29uc29sZS5sb2coZ2V0UHJvdmlkZXJzKCkpXCIgMj4vZGV2L251bGwgfHwgZWNobyBcIm5vdCBhdmFpbGFibGUgeWV0IC0gbmVlZCB0byBpbnN0YWxsIGRlcHNcIiJ9fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0IjoxNTcsImNhY2hlUmVhZCI6NDI5NjgsImNhY2hlV3JpdGUiOjEwNDIsInRvdGFsVG9rZW5zIjo0NDE2OCwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDM5MjUwMDAwMDAwMDAwMDA1LCJjYWNoZVJlYWQiOjAuMDIxNDg0LCJjYWNoZVdyaXRlIjowLjAwNjUxMjUsInRvdGFsIjowLjAzMTkyNjV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDc1MzQ5NDl9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4Y2I5MDY4ZCIsInBhcmVudElkIjoiM2QyNTgxYzkiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjU4OjU5LjgzNVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxMVRyQmZwck5mZnNlQkNBRlJOVG9IZyIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Im5vdCBhdmFpbGFibGUgeWV0IC0gbmVlZCB0byBpbnN0YWxsIGRlcHNcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzUzOTgzNH19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKGJhc2gpIn0sImlkIjoiYTdlNmVlNDQiLCJwYXJlbnRJZCI6IjhjYjkwNjhkIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OTowMy4xNTVaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZTc4ODdlZjYiLCJwYXJlbnRJZCI6ImE3ZTZlZTQ0IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OTowMy4xNTZaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMUxvZlY4MXBjWHhSM3E5SkVVWUVadW0iLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiY2QgL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktdHMtYXBlcnR1cmUgJiYgY2F0IHBhY2thZ2UuanNvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIFwibm8gcGFja2FnZS5qc29uIHlldFwiIn19XSwiYXBpIjoiYW50aHJvcGljLW1lc3NhZ2VzIiwicHJvdmlkZXIiOiJhbnRocm9waWMiLCJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInVzYWdlIjp7ImlucHV0IjoxLCJvdXRwdXQiOjk3LCJjYWNoZVJlYWQiOjQ0MDEwLCJjYWNoZVdyaXRlIjoxNzgsInRvdGFsVG9rZW5zIjo0NDI4NiwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDI0MjUsImNhY2hlUmVhZCI6MC4wMjIwMDUsImNhY2hlV3JpdGUiOjAuMDAxMTEyNSwidG90YWwiOjAuMDI1NTQ3NDk5OTk5OTk5OTk3fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3NTM5ODM1fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiODg1OGNiZjIiLCJwYXJlbnRJZCI6ImU3ODg3ZWY2IiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OTowMy4xODhaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMUxvZlY4MXBjWHhSM3E5SkVVWUVadW0iLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJ7XG4gIFwibmFtZVwiOiBcIkBhbGlvdS9waS1saW5rdXBcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjFcIixcbiAgXCJwYWNrYWdlTWFuYWdlclwiOiBcInBucG1AMTAuMjYuMVwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlXCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJwaS1wYWNrYWdlXCJcbiAgXSxcbiAgXCJwaVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcbiAgICAgIFwiLi9zcmMvaW5kZXgudHNcIlxuICAgIF0sXG4gICAgXCJ2aWRlb1wiOiBcImh0dHBzOi8vYXNzZXRzLmFsaW91Lm1lL3BpLWV4dGVuc2lvbnMvZGVtb3MvcGktdHMtYXBlcnR1cmUubXA0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzXCI6IFwiXjAuMy4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBtYXJpb3plY2huZXIvcGktYWlcIjogXCI+PTAuNTIuMTJcIixcbiAgICBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI6IFwiPj0wLjUyLjEyXCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInR5cGVjaGVja1wiOiBcInRzYyAtLW5vRW1pdFwiLFxuICAgIFwibGludFwiOiBcImJpb21lIGNoZWNrXCIsXG4gICAgXCJmb3JtYXRcIjogXCJiaW9tZSBjaGVjayAtLXdyaXRlXCIsXG4gICAgXCJwcmVwYXJlXCI6IFwiaHVza3lcIixcbiAgICBcImNoYW5nZXNldFwiOiBcImNoYW5nZXNldFwiLFxuICAgIFwidmVyc2lvblwiOiBcImNoYW5nZXNldCB2ZXJzaW9uXCIsXG4gICAgXCJyZWxlYXNlXCI6IFwicG5wbSBjaGFuZ2VzZXQgcHVibGlzaFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBiaW9tZWpzL2Jpb21lXCI6IFwiXjIuMy4xM1wiLFxuICAgIFwiQGNoYW5nZXNldHMvY2xpXCI6IFwiXjIuMjcuMTFcIixcbiAgICBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI6IFwiMC41Mi4xMlwiLFxuICAgIFwiQG1hcmlvemVjaG5lci9waS10dWlcIjogXCIwLjUyLjEyXCIsXG4gICAgXCJAc2luY2xhaXIvdHlwZWJveFwiOiBcIl4wLjM0LjQ4XCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yNS4wLjEwXCIsXG4gICAgXCJodXNreVwiOiBcIl45LjEuN1wiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjkuM1wiXG4gIH0sXG4gIFwicG5wbVwiOiB7XG4gICAgXCJvdmVycmlkZXNcIjoge1xuICAgICAgXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI6IFwiJEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCIsXG4gICAgICBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI6IFwiJEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCJcbiAgICB9XG4gIH1cbn1cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzU0MzE4N319LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHJlYWQpIn0sImlkIjoiYTc0ZGJmOWMiLCJwYXJlbnRJZCI6Ijg4NThjYmYyIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OTowOS4yNjVaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTJjNGE3ZGYiLCJwYXJlbnRJZCI6ImE3NGRiZjljIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OTowOS4yNjVaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiR29vZCwgdGhlIHBhY2thZ2UuanNvbiBhbHJlYWR5IGV4aXN0cyAoc2VlbXMgc2NhZmZvbGRlZCBmcm9tIHBpLWxpbmt1cCkuIExldCBtZSBub3cgYWxzbyBjaGVjayBpZiB0aGVyZSdzIGFuIFNESyB3YXkgdG8gZ2V0IHByb3ZpZGVycyBmcm9tIHRoZSBFeHRlbnNpb25BUEkgY29udGV4dDoifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFIY0p1WnpTMlM2VFY1SGhyeVRCWktiIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii92YXIvZm9sZGVycy9bUkVEQUNURURdL1QvcGktZXh0ZW5zaW9ucy9ucG0vZjM1YjIxMjkvbm9kZV9tb2R1bGVzL0BhbGlvdS9waS1leHRlbnNpb24tZGV2L3NraWxscy9waS1leHRlbnNpb24vcmVmZXJlbmNlcy9hZGRpdGlvbmFsLWFwaXMubWQifX1dLCJhcGkiOiJhbnRocm9waWMtbWVzc2FnZXMiLCJwcm92aWRlciI6ImFudGhyb3BpYyIsIm1vZGVsIjoiY2xhdWRlLW9wdXMtNC02IiwidXNhZ2UiOnsiaW5wdXQiOjEsIm91dHB1dCI6MTY1LCJjYWNoZVJlYWQiOjQ0MTg4LCJjYWNoZVdyaXRlIjo2NTYsInRvdGFsVG9rZW5zIjo0NTAxMCwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDQxMjUsImNhY2hlUmVhZCI6MC4wMjIwOTQsImNhY2hlV3JpdGUiOjAuMDA0MSwidG90YWwiOjAuMDMwMzIzOTk5OTk5OTk5OTk3fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzcxMzQ3NTQzMTg5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNmNjOWM0Y2MiLCJwYXJlbnRJZCI6IjUyYzRhN2RmIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OTowOS4yODBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJ0b29sdV8wMUhjSnVaelMyUzZUVjVIaHJ5VEJaS2IiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIjIEFkZGl0aW9uYWwgQVBJc1xuXG5UaGVzZSBBUElzIGFyZSBhdmFpbGFibGUgb24gYEV4dGVuc2lvbkFQSWAgYW5kIGBFeHRlbnNpb25Db250ZXh0YCBidXQgYXJlIGxlc3MgY29tbW9ubHkgdXNlZC4gRWFjaCBpcyBzaG93biB3aXRoIGEgbWluaW1hbCBleGFtcGxlLlxuXG5XaGVuIHlvdSBpbXBsZW1lbnQgc29tZXRoaW5nIHVzaW5nIG9uZSBvZiB0aGVzZSBBUElzLCB1cGRhdGUgdGhpcyBza2lsbCByZWZlcmVuY2Ugd2l0aCBhIGZ1bGxlciBleGFtcGxlIGJhc2VkIG9uIHlvdXIgYWN0dWFsIHVzYWdlLlxuXG4jIyBTaG9ydGN1dHNcblxuUmVnaXN0ZXIgZ2xvYmFsIGtleWJvYXJkIHNob3J0Y3V0czpcblxuYGBgdHlwZXNjcmlwdFxucGkucmVnaXN0ZXJTaG9ydGN1dChcImN0cmwrc2hpZnQrcFwiLCB7XG4gIGRlc2NyaXB0aW9uOiBcIlRvZ2dsZSBwbGFuIG1vZGVcIixcbiAgaGFuZGxlcjogYXN5bmMgKGN0eCkgPT4ge1xuICAgIHBsYW5Nb2RlRW5hYmxlZCA9ICFwbGFuTW9kZUVuYWJsZWQ7XG4gICAgY3R4LnVpLnNldFN0YXR1cyhcInBsYW5cIiwgcGxhbk1vZGVFbmFibGVkID8gXCJQbGFuIE1vZGVcIiA6IFwiXCIpO1xuICB9LFxufSk7XG5gYGBcblxuU2hvcnRjdXRzIHdvcmsgb25seSBpbiBJbnRlcmFjdGl2ZSBtb2RlLlxuXG4jIyBGbGFnc1xuXG5SZWdpc3RlciBib29sZWFuIGZsYWdzIHRoYXQgcGVyc2lzdCBhY3Jvc3Mgc2Vzc2lvbnM6XG5cbmBgYHR5cGVzY3JpcHRcbi8vIFJlZ2lzdGVyXG5waS5yZWdpc3RlckZsYWcoXCJhdXRvLWNvbW1pdFwiLCB7XG4gIGRlc2NyaXB0aW9uOiBcIkF1dG8tY29tbWl0IGFmdGVyIGVhY2ggdHVyblwiLFxuICBkZWZhdWx0OiBmYWxzZSxcbn0pO1xuXG4vLyBSZWFkIChpbiBhbnkgaGFuZGxlcilcbmNvbnN0IGF1dG9Db21taXQgPSBwaS5nZXRGbGFnKFwiYXV0by1jb21taXRcIik7XG5gYGBcblxuVXNlcnMgdG9nZ2xlIGZsYWdzIHdpdGggYC9mbGFnIGF1dG8tY29tbWl0YCBpbiB0aGUgaW5wdXQgZWRpdG9yLlxuXG4jIyBzZW5kVXNlck1lc3NhZ2VcblxuSW5qZWN0IGEgdXNlciBtZXNzYWdlIGludG8gdGhlIGNvbnZlcnNhdGlvbiBwcm9ncmFtbWF0aWNhbGx5OlxuXG5gYGB0eXBlc2NyaXB0XG5waS5zZW5kVXNlck1lc3NhZ2UoXCJQbGVhc2Ugc3VtbWFyaXplIHdoYXQgd2UganVzdCBkaXNjdXNzZWRcIik7XG5gYGBcblxuVGhpcyB0cmlnZ2VycyBhIGZ1bGwgYWdlbnQgdHVybiBhcyBpZiB0aGUgdXNlciB0eXBlZCB0aGUgbWVzc2FnZS4gVXNlZnVsIGZvciBmaWxlIHdhdGNoZXJzLCB0aW1lcnMsIG9yIG90aGVyIGF1dG9tYXRlZCB0cmlnZ2Vycy5cblxuIyMgU2Vzc2lvbiBOYW1lXG5cblNldCBvciBnZXQgYSBuYW1lIGZvciB0aGUgY3VycmVudCBzZXNzaW9uIChzaG93biBpbiB0aGUgc2Vzc2lvbiBzZWxlY3Rvcik6XG5cbmBgYHR5cGVzY3JpcHRcbnBpLnNldFNlc3Npb25OYW1lKFwiRmVhdHVyZTogQXV0aCBSZWZhY3RvclwiKTtcbmNvbnN0IG5hbWUgPSBwaS5nZXRTZXNzaW9uTmFtZSgpO1xuYGBgXG5cbiMjIExhYmVsc1xuXG5TZXQgYSBsYWJlbCBvbiBhIHNwZWNpZmljIHNlc3Npb24gZW50cnkgKHNob3duIGluIGAvdHJlZWAgdmlldyk6XG5cbmBgYHR5cGVzY3JpcHRcbnBpLnNldExhYmVsKGVudHJ5SWQsIFwiY2hlY2twb2ludDogYmVmb3JlIHJlZmFjdG9yXCIpO1xuYGBgXG5cbiMjIGV4ZWNcblxuUnVuIGEgc2hlbGwgY29tbWFuZCBhbmQgZ2V0IHRoZSByZXN1bHQ6XG5cbmBgYHR5cGVzY3JpcHRcbmNvbnN0IHJlc3VsdCA9IGF3YWl0IHBpLmV4ZWMoXCJnaXQgc3RhdHVzIC0tcG9yY2VsYWluXCIsIHsgY3dkOiBjdHguY3dkIH0pO1xuLy8gcmVzdWx0OiB7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZSB9XG5gYGBcblxuVXNlZnVsIGluIGhvb2tzIGZvciBnaXQgb3BlcmF0aW9ucywgZW52aXJvbm1lbnQgY2hlY2tzLCBldGMuXG5cbiMjIEFjdGl2ZSBUb29sc1xuXG5HZXQgb3Igc2V0IHdoaWNoIHRvb2xzIGFyZSBjdXJyZW50bHkgYWN0aXZlOlxuXG5gYGB0eXBlc2NyaXB0XG5jb25zdCB0b29scyA9IHBpLmdldEFjdGl2ZVRvb2xzKCk7IC8vIHN0cmluZ1tdXG5waS5zZXRBY3RpdmVUb29scyhbXCJiYXNoXCIsIFwicmVhZFwiLCBcIndyaXRlXCIsIFwibXlfY3VzdG9tX3Rvb2xcIl0pO1xuYGBgXG5cblNldHRpbmcgYWN0aXZlIHRvb2xzIHJlc3RyaWN0cyB3aGljaCB0b29scyB0aGUgTExNIGNhbiB1c2UuXG5cbiMjIE1vZGVsIENvbnRyb2xcblxuYGBgdHlwZXNjcmlwdFxuLy8gU2V0IHRoZSBhY3RpdmUgbW9kZWxcbnBpLnNldE1vZGVsKFwiYW50aHJvcGljL2NsYXVkZS1zb25uZXQtNC0yMDI1MDUxNFwiKTtcblxuLy8gR2V0L3NldCB0aGlua2luZyBsZXZlbFxuY29uc3QgbGV2ZWwgPSBwaS5nZXRUaGlua2luZ0xldmVsKCk7IC8vIFwibm9uZVwiIHwgXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIlxucGkuc2V0VGhpbmtpbmdMZXZlbChcImhpZ2hcIik7XG5gYGBcblxuIyMgU3lzdGVtIFByb21wdFxuXG5SZWFkIG9yIG1vZGlmeSB0aGUgc3lzdGVtIHByb21wdCAodHlwaWNhbGx5IGluIGBiZWZvcmVfYWdlbnRfc3RhcnRgKTpcblxuYGBgdHlwZXNjcmlwdFxucGkub24oXCJiZWZvcmVfYWdlbnRfc3RhcnRcIiwgYXN5bmMgKF9ldmVudCwgY3R4KSA9PiB7XG4gIGNvbnN0IHByb21wdCA9IGN0eC5nZXRTeXN0ZW1Qcm9tcHQoKTtcbiAgY3R4LnNldFN5c3RlbVByb21wdChwcm9tcHQgKyBcIlxcblxcbkV4dHJhIGluc3RydWN0aW9ucy5cIik7XG59KTtcbmBgYFxuXG5UaGUgc3lzdGVtIHByb21wdCByZXNldHMgZWFjaCB0dXJuLCBzbyBtb2RpZmljYXRpb25zIGFyZSBub3QgY3VtdWxhdGl2ZS5cblxuIyMgQ29tcGFjdGlvblxuXG5UcmlnZ2VyIGNvbXBhY3Rpb24gcHJvZ3JhbW1hdGljYWxseTpcblxuYGBgdHlwZXNjcmlwdFxuYXdhaXQgcGkuY29tcGFjdCgpO1xuYGBgXG5cbiMjIFNodXRkb3duXG5cblNodXQgZG93biBwaSBncmFjZWZ1bGx5OlxuXG5gYGB0eXBlc2NyaXB0XG5waS5zaHV0ZG93bigpO1xuYGBgXG5cbiMjIEV2ZW50QnVzXG5cbkludGVyLWV4dGVuc2lvbiBjb21tdW5pY2F0aW9uIHZpYSBhIHNoYXJlZCBldmVudCBidXM6XG5cbmBgYHR5cGVzY3JpcHRcbi8vIEV4dGVuc2lvbiBBOiBlbWl0XG5waS5ldmVudHMuZW1pdChcIm15LWV4dGVuc2lvbjpkYXRhLXJlYWR5XCIsIHsgaXRlbXM6IFsuLi5dIH0pO1xuXG4vLyBFeHRlbnNpb24gQjogbGlzdGVuXG5waS5ldmVudHMub24oXCJteS1leHRlbnNpb246ZGF0YS1yZWFkeVwiLCAoZGF0YSkgPT4ge1xuICBjb25zb2xlLmxvZyhcIlJlY2VpdmVkOlwiLCBkYXRhLml0ZW1zLmxlbmd0aCwgXCJpdGVtc1wiKTtcbn0pO1xuYGBgXG5cbk5hbWVzcGFjZSBldmVudCBuYW1lcyB3aXRoIHlvdXIgZXh0ZW5zaW9uIG5hbWUgdG8gYXZvaWQgY29sbGlzaW9ucy4gVGhlIGV2ZW50IGJ1cyBpcyBzdXBwbGVtZW50YXJ5IC0tIG1vc3QgZXh0ZW5zaW9ucyBkbyBub3QgbmVlZCBpdC4gVXNlIGl0IHdoZW4gdHdvIGV4dGVuc2lvbnMgbmVlZCB0byBjb29yZGluYXRlLlxuXG4jIyBUaGVtZSBDb250cm9sXG5cbmBgYHR5cGVzY3JpcHRcbi8vIEdldCBjdXJyZW50IGFuZCBhdmFpbGFibGUgdGhlbWVzXG5jb25zdCBjdXJyZW50ID0gY3R4LnVpLmdldFRoZW1lKCk7XG5jb25zdCBhbGwgPSBjdHgudWkuZ2V0QWxsVGhlbWVzKCk7XG5cbi8vIFNldCB0aGVtZVxuY29uc3QgcmVzdWx0ID0gY3R4LnVpLnNldFRoZW1lKFwiY2F0cHB1Y2Npbi1tb2NoYVwiKTtcbi8vIHJlc3VsdDogeyBzdWNjZXNzOiBib29sZWFuLCBlcnJvcj86IHN0cmluZyB9XG5gYGBcblxuIyMgVUkgQ3VzdG9taXphdGlvblxuXG5gYGB0eXBlc2NyaXB0XG4vLyBSZXBsYWNlIHRoZSBmb290ZXJcbmN0eC51aS5zZXRGb290ZXIoKG1heFdpZHRoLCB0aGVtZSkgPT4ge1xuICByZXR1cm4gdGhlbWUuZmcoXCJtdXRlZFwiLCBcIkN1c3RvbSBmb290ZXIgY29udGVudFwiKTtcbn0pO1xuXG4vLyBSZXBsYWNlIHRoZSBzdGFydHVwIGhlYWRlclxuY3R4LnVpLnNldEhlYWRlcigobWF4V2lkdGgsIHRoZW1lKSA9PiB7XG4gIHJldHVybiB0aGVtZS5mZyhcImFjY2VudFwiLCBcIk15IEN1c3RvbSBIZWFkZXJcIik7XG59KTtcblxuLy8gU2V0IHRoZSBlZGl0b3IgY29tcG9uZW50XG5jdHgudWkuc2V0RWRpdG9yQ29tcG9uZW50KCh0dWksIHRoZW1lLCBrYikgPT4ge1xuICByZXR1cm4gbmV3IEN1c3RvbUVkaXRvcih0dWksIHRoZW1lLCBrYik7XG59KTtcblxuLy8gUHJlZmlsbCB0aGUgZWRpdG9yXG5jdHgudWkuc2V0RWRpdG9yVGV4dChcIlByZWZpbGxlZCBjb250ZW50XCIpO1xuYGBgXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3NzEzNDc1NDkyNzN9fSx7InR5cGUiOiJjdXN0b20iLCJjdXN0b21UeXBlIjoiYWQ6dGVybWluYWwtdGl0bGUiLCJkYXRhIjp7InRpdGxlIjoiz4A6IHBpLXRzLWFwZXJ0dXJlICh3b3JrZXIpIn0sImlkIjoiNWE3MGNlZjEiLCJwYXJlbnRJZCI6IjZjYzljNGNjIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OToxNS45OTRaIn0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYzY0ZGE5ZDYiLCJwYXJlbnRJZCI6IjVhNzBjZWYxIiwidGltZXN0YW1wIjoiMjAyNi0wMi0xN1QxNjo1OToxNS45OTRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiTm93IEkgaGF2ZSBldmVyeXRoaW5nLiBMZXQgbWUgc2NhZmZvbGQgdGhlIGV4dGVuc2lvbjoifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDFWa1A1aFJIV2hmM2M1ZlNBbmEzajRNIiwibmFtZSI6IndvcmtlciIsImFyZ3VtZW50cyI6eyJ0YXNrIjoiVXBkYXRlIHBhY2thZ2UuanNvbiBmb3IgcGktdHMtYXBlcnR1cmUiLCJpbnN0cnVjdGlvbnMiOiJVcGRhdGUgdGhlIHBhY2thZ2UuanNvbiB0byByZWZsZWN0IHRoZSBwaS10cy1hcGVydHVyZSBleHRlbnNpb24gaW5zdGVhZCBvZiBwaS1saW5rdXAuIENoYW5nZXM6XG4tIG5hbWU6IFwiQGFsaW91L3BpLXRzLWFwZXJ0dXJlXCJcbi0gZGVzY3JpcHRpb246IFwiUm91dGUgUGkgTExNIHByb3ZpZGVycyB0aHJvdWdoIFRhaWxzY2FsZSBBcGVydHVyZVwiXG4tIEtlZXAgdGhlIHNhbWUgc3RydWN0dXJlLCB2ZXJzaW9ucywgYW5kIHNjcmlwdHNcbi0gS2VlcCBAYWxpb3UvcGktdXRpbHMtc2V0dGluZ3MgZGVwZW5kZW5jeVxuLSBLZWVwIGFsbCBwZWVyRGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIHBucG0gb3ZlcnJpZGVzIGFzLWlzXG4tIEtlZXAgdGhlIHBpLmV4dGVuc2lvbnMgYW5kIHBpLnZpZGVvIGZpZWxkcyBhcy1pc1xuLSBLZWVwIHJlcG9zaXRvcnkgdXJsIGFzLWlzIiwiZmlsZXMiOlsicGFja2FnZS5qc29uIl19fV0sImFwaSI6ImFudGhyb3BpYy1tZXNzYWdlcyIsInByb3ZpZGVyIjoiYW50aHJvcGljIiwibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJ1c2FnZSI6eyJpbnB1dCI6MSwib3V0cHV0IjoyMzksImNhY2hlUmVhZCI6NDQ4NDQsImNhY2hlV3JpdGUiOjEzMDgsInRvdGFsVG9rZW5zIjo0NjM5MiwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDU5NzUsImNhY2hlUmVhZCI6MC4wMjI0MjE5OTk5OTk5OTk5OTcsImNhY2hlV3JpdGUiOjAuMDA4MTc1LCJ0b3RhbCI6MC4wMzY1Nzd9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3NzEzNDc1NDkyODF9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI2MjBmZDFlOSIsInBhcmVudElkIjoiYzY0ZGE5ZDYiLCJ0aW1lc3RhbXAiOiIyMDI2LTAyLTE3VDE2OjU5OjI3LjAzNVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6InRvb2x1XzAxVmtQNWhSSFdoZjNjNWZTQW5hM2o0TSIsInRvb2xOYW1lIjoid29ya2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiRG9uZS4gSGVyZSdzIGEgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlOlxuXG4jIyMgQ2hhbmdlcyB0byBgcGFja2FnZS5qc29uYFxuMS4gKipgbmFtZWAqKjogVXBkYXRlZCBmcm9tIGBcIkBhbGlvdS9waS1saW5rdXBcImAg4oaSIGBcIkBhbGlvdS9waS10cy1hcGVydHVyZVwiYFxuMi4gKipgZGVzY3JpcHRpb25gKio6IEFkZGVkIHRoZSBuZXcgZmllbGQgYFwiUm91dGUgUGkgTExNIHByb3ZpZGVycyB0aHJvdWdoIFRhaWxzY2FsZSBBcGVydHVyZVwiYCAoaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgYG5hbWVgLCBmb2xsb3dpbmcgc3RhbmRhcmQgcGFja2FnZS5qc29uIGNvbnZlbnRpb24pXG5cbkV2ZXJ5dGhpbmcgZWxzZSB3YXMgbGVmdCB1bnRvdWNoZWQg4oCUIGB2ZXJzaW9uYCwgYHBhY2thZ2VNYW5hZ2VyYCwgYHJlcG9zaXRvcnlgLCBga2V5d29yZHNgLCBgcGkuZXh0ZW5zaW9uc2AsIGBwaS52aWRlb2AsIGBkZXBlbmRlbmNpZXNgIChpbmNsdWRpbmcgYEBhbGlvdS9waS11dGlscy1zZXR0aW5nc2ApLCBgcGVlckRlcGVuZGVuY2llc2AsIGBzY3JpcHRzYCwgYGRldkRlcGVuZGVuY2llc2AsIGFuZCBgcG5wbS5vdmVycmlkZXNgLiJ9XSwiZGV0YWlscyI6eyJfcmVuZGVyS2V5IjoidG9vbHVfMDFWa1A1aFJIV2hmM2M1ZlNBbmEzajRNIiwidGFzayI6IlVwZGF0ZSBwYWNrYWdlLmpzb24gZm9yIHBpLXRzLWFwZXJ0dXJlIiwiaW5zdHJ1Y3Rpb25zIjoiVXBkYXRlIHRoZSBwYWNrYWdlLmpzb24gdG8gcmVmbGVjdCB0aGUgcGktdHMtYXBlcnR1cmUgZXh0ZW5zaW9uIGluc3RlYWQgb2YgcGktbGlua3VwLiBDaGFuZ2VzOlxuLSBuYW1lOiBcIkBhbGlvdS9waS10cy1hcGVydHVyZVwiXG4tIGRlc2NyaXB0aW9uOiBcIlJvdXRlIFBpIExMTSBwcm92aWRlcnMgdGhyb3VnaCBUYWlsc2NhbGUgQXBlcnR1cmVcIlxuLSBLZWVwIHRoZSBzYW1lIHN0cnVjdHVyZSwgdmVyc2lvbnMsIGFuZCBzY3JpcHRzXG4tIEtlZXAgQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzIGRlcGVuZGVuY3lcbi0gS2VlcCBhbGwgcGVlckRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBwbnBtIG92ZXJyaWRlcyBhcy1pc1xuLSBLZWVwIHRoZSBwaS5leHRlbnNpb25zIGFuZCBwaS52aWRlbyBmaWVsZHMgYXMtaXNcbi0gS2VlcCByZXBvc2l0b3J5IHVybCBhcy1pcyIsImZpbGVzIjpbInBhY2thZ2UuanNvbiJdLCJza2lsbHNSZXNvbHZlZCI6MCwidG9vbENhbGxzIjpbeyJ0b29sQ2FsbElkIjoidG9vbHVfMDFFYkVZdTlRWGhkRXRUdkZZOHlSd3BmIiwidG9vbE5hbWUiOiJyZWFkIiwiYXJncyI6eyJwYXRoIjoicGFja2FnZS5qc29uIn0sInN0YXR1cyI6ImRvbmUiLCJzdGFydGVkQXQiOjE3NzEzNDc1NTgyNDgsInJlc3VsdCI6eyJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJ7XG4gIFwibmFtZVwiOiBcIkBhbGlvdS9waS1saW5rdXBcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjFcIixcbiAgXCJwYWNrYWdlTWFuYWdlclwiOiBcInBucG1AMTAuMjYuMVwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FsaW91L3BpLXRzLWFwZXJ0dXJlXCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJwaS1wYWNrYWdlXCJcbiAgXSxcbiAgXCJwaVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcbiAgICAgIFwiLi9zcmMvaW5kZXgudHNcIlxuICAgIF0sXG4gICAgXCJ2aWRlb1wiOiBcImh0dHBzOi8vYXNzZXRzLmFsaW91Lm1lL3BpLWV4dGVuc2lvbnMvZGVtb3MvcGktdHMtYXBlcnR1cmUubXA0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzXCI6IFwiXjAuMy4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBtYXJpb3plY2huZXIvcGktYWlcIjogXCI+PTAuNTIuMTJcIixcbiAgICBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI6IFwiPj0wLjUyLjEyXCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInR5cGVjaGVja1wiOiBcInRzYyAtLW5vRW1pdFwiLFxuICAgIFwibGludFwiOiBcImJpb21lIGNoZWNrXCIsXG4gICAgXCJmb3JtYXRcIjogXCJiaW9tZSBjaGVjayAtLXdyaXRlXCIsXG4gICAgXCJwcmVwYXJlXCI6IFwiaHVza3lcIixcbiAgICBcImNoYW5nZXNldFwiOiBcImNoYW5nZXNldFwiLFxuICAgIFwidmVyc2lvblwiOiBcImNoYW5nZXNldCB2ZXJzaW9uXCIsXG4gICAgXCJyZWxlYXNlXCI6IFwicG5wbSBjaGFuZ2VzZXQgcHVibGlzaFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBiaW9tZWpzL2Jpb21lXCI6IFwiXjIuMy4xM1wiLFxuICAgIFwiQGNoYW5nZXNldHMvY2xpXCI6IFwiXjIuMjcuMTFcIixcbiAgICBcIkBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCI6IFwiMC41Mi4xMlwiLFxuICAgIFwiQG1hcmlvemVjaG5lci9waS10dWlcIjogXCIwLjUyLjEyXCIsXG4gICAgXCJAc2luY2xhaXIvdHlwZWJveFwiOiBcIl4wLjM0LjQ4XCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yNS4wLjEwXCIsXG4gICAgXCJodXNreVwiOiBcIl45LjEuN1wiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjkuM1wiXG4gIH0sXG4gIFwicG5wbVwiOiB7XG4gICAgXCJvdmVycmlkZXNcIjoge1xuICAgICAgXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI6IFwiJEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCIsXG4gICAgICBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI6IFwiJEBtYXJpb3plY2huZXIvcGktY29kaW5nLWFnZW50XCJcbiAgICB9XG4gIH1cbn1cbiJ9XX0sImVuZGVkQXQiOjE3NzEzNDc1NTgyNTEsImR1cmF0aW9uTXMiOjN9LHsidG9vbENhbGxJZCI6InRvb2x1XzAxVGVzQTNFVWNVV3p3dFNtMlNLVHdYUiIsInRvb2xOYW1lIjoiZWRpdCIsImFyZ3MiOnsicGF0aCI6InBhY2thZ2UuanNvbiIsIm9sZFRleHQiOiIgIFwibmFtZVwiOiBcIkBhbGlvdS9waS1saW5rdXBcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjFcIiwiLCJuZXdUZXh0IjoiICBcIm5hbWVcIjogXCJAYWxpb3UvcGktdHMtYXBlcnR1cmVcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlJvdXRlIFBpIExMTSBwcm92aWRlcnMgdGhyb3VnaCBUYWlsc2NhbGUgQXBlcnR1cmVcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjFcIiwifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzU2MTI1OSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSByZXBsYWNlZCB0ZXh0IGluIHBhY2thZ2UuanNvbi4ifV0sImRldGFpbHMiOnsiZGlmZiI6IiAgMSB7XG4tIDIgICBcIm5hbWVcIjogXCJAYWxpb3UvcGktbGlua3VwXCIsXG4rIDIgICBcIm5hbWVcIjogXCJAYWxpb3UvcGktdHMtYXBlcnR1cmVcIixcbisgMyAgIFwiZGVzY3JpcHRpb25cIjogXCJSb3V0ZSBQaSBMTE0gcHJvdmlkZXJzIHRocm91Z2ggVGFpbHNjYWxlIEFwZXJ0dXJlXCIsXG4gIDMgICBcInZlcnNpb25cIjogXCIwLjAuMVwiLFxuICA0ICAgXCJwYWNrYWdlTWFuYWdlclwiOiBcInBucG1AMTAuMjYuMVwiLFxuICA1ICAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgNiAgICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgLi4uIiwiZmlyc3RDaGFuZ2VkTGluZSI6Mn19LCJlbmRlZEF0IjoxNzcxMzQ3NTYxMjYzLCJkdXJhdGlvbk1zIjo0fSx7InRvb2xDYWxsSWQiOiJ0b29sdV8wMTZrRXZjOEM5YXVZYnhuZU5KajRqcHoiLCJ0b29sTmFtZSI6InJlYWQiLCJhcmdzIjp7InBhdGgiOiJwYWNrYWdlLmpzb24ifSwic3RhdHVzIjoiZG9uZSIsInN0YXJ0ZWRBdCI6MTc3MTM0NzU2MzcwOSwicmVzdWx0Ijp7ImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IntcbiAgXCJuYW1lXCI6IFwiQGFsaW91L3BpLXRzLWFwZXJ0dXJlXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJSb3V0ZSBQaSBMTE0gcHJvdmlkZXJzIHRocm91Z2ggVGFpbHNjYWxlIEFwZXJ0dXJlXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMC4xXCIsXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDEwLjI2LjFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9hbGlvdS9waS10cy1hcGVydHVyZVwiXG4gIH0sXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwicGktcGFja2FnZVwiXG4gIF0sXG4gIFwicGlcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXG4gICAgICBcIi4vc3JjL2luZGV4LnRzXCJcbiAgICBdLFxuICAgIFwidmlkZW9cIjogXCJodHRwczovL2Fzc2V0cy5hbGlvdS5tZS9waS1leHRlbnNpb25zL2RlbW9zL3BpLXRzLWFwZXJ0dXJlLm1wNFwiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhbGlvdS9waS11dGlscy1zZXR0aW5nc1wiOiBcIl4wLjMuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI6IFwiPj0wLjUyLjEyXCIsXG4gICAgXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiOiBcIj49MC41Mi4xMlwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcImxpbnRcIjogXCJiaW9tZSBjaGVja1wiLFxuICAgIFwiZm9ybWF0XCI6IFwiYmlvbWUgY2hlY2sgLS13cml0ZVwiLFxuICAgIFwicHJlcGFyZVwiOiBcImh1c2t5XCIsXG4gICAgXCJjaGFuZ2VzZXRcIjogXCJjaGFuZ2VzZXRcIixcbiAgICBcInZlcnNpb25cIjogXCJjaGFuZ2VzZXQgdmVyc2lvblwiLFxuICAgIFwicmVsZWFzZVwiOiBcInBucG0gY2hhbmdlc2V0IHB1Ymxpc2hcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYmlvbWVqcy9iaW9tZVwiOiBcIl4yLjMuMTNcIixcbiAgICBcIkBjaGFuZ2VzZXRzL2NsaVwiOiBcIl4yLjI3LjExXCIsXG4gICAgXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiOiBcIjAuNTIuMTJcIixcbiAgICBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI6IFwiMC41Mi4xMlwiLFxuICAgIFwiQHNpbmNsYWlyL3R5cGVib3hcIjogXCJeMC4zNC40OFwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjUuMC4xMFwiLFxuICAgIFwiaHVza3lcIjogXCJeOS4xLjdcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNS45LjNcIlxuICB9LFxuICBcInBucG1cIjoge1xuICAgIFwib3ZlcnJpZGVzXCI6IHtcbiAgICAgIFwiQG1hcmlvemVjaG5lci9waS1haVwiOiBcIiRAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiLFxuICAgICAgXCJAbWFyaW96ZWNobmVyL3BpLXR1aVwiOiBcIiRAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiXG4gICAgfVxuICB9XG59XG4ifV19LCJlbmRlZEF0IjoxNzcxMzQ3NTYzNzE0LCJkdXJhdGlvbk1zIjo1fV0sInJlc3BvbnNlIjoiRG9uZS4gSGVyZSdzIGEgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlOlxuXG4jIyMgQ2hhbmdlcyB0byBgcGFja2FnZS5qc29uYFxuMS4gKipgbmFtZWAqKjogVXBkYXRlZCBmcm9tIGBcIkBhbGlvdS9waS1saW5rdXBcImAg4oaSIGBcIkBhbGlvdS9waS10cy1hcGVydHVyZVwiYFxuMi4gKipgZGVzY3JpcHRpb25gKio6IEFkZGVkIHRoZSBuZXcgZmllbGQgYFwiUm91dGUgUGkgTExNIHByb3ZpZGVycyB0aHJvdWdoIFRhaWxzY2FsZSBBcGVydHVyZVwiYCAoaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgYG5hbWVgLCBmb2xsb3dpbmcgc3RhbmRhcmQgcGFja2FnZS5qc29uIGNvbnZlbnRpb24pXG5cbkV2ZXJ5dGhpbmcgZWxzZSB3YXMgbGVmdCB1bnRvdWNoZWQg4oCUIGB2ZXJzaW9uYCwgYHBhY2thZ2VNYW5hZ2VyYCwgYHJlcG9zaXRvcnlgLCBga2V5d29yZHNgLCBgcGkuZXh0ZW5zaW9uc2AsIGBwaS52aWRlb2AsIGBkZXBlbmRlbmNpZXNgIChpbmNsdWRpbmcgYEBhbGlvdS9waS11dGlscy1zZXR0aW5nc2ApLCBgcGVlckRlcGVuZGVuY2llc2AsIGBzY3JpcHRzYCwgYGRldkRlcGVuZGVuY2llc2AsIGFuZCBgcG5wbS5vdmVycmlkZXNgLiIsInVzYWdlIjp7ImlucHV0VG9rZW5zIjoxNzEzLCJvdXRwdXRUb2tlbnMiOjU2NSwiY2FjaGVSZWFkVG9rZW5zIjo0OTU2LCJjYWNoZVdyaXRlVG9rZW5zIjozMjU1LCJlc3RpbWF0ZWRUb2tlbnMiOjEwNDg5LCJsbG1Db3N0IjowLjAyNzMwNzA1LCJ0b29sQ29zdCI6MCwidG90YWxDb3N0IjowLjAyNzMwNzA1fSwicmVzb2x2ZWRNb2RlbCI6eyJwcm92aWRlciI6ImFudGhyb3BpYyIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTUifSwiY3dkIjoiL1VzZXJzL2FsaW91ZGlhbGxvL2NvZGUvc3JjL2dpdGh1Yi5jb20vYWxpb3UvcGktdHMtYXBlcnR1cmUifSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzU2NzAzM319LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHdyaXRlKSJ9LCJpZCI6ImVlNTQ0YTg2IiwicGFyZW50SWQiOiI2MjBmZDFlOSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTk6MzMuMzA1WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjQ1ZDQwNGE5IiwicGFyZW50SWQiOiJlZTU0NGE4NiIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTk6MzMuMzA2WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ik5vdyBsZXQgbWUgY3JlYXRlIGFsbCB0aGUgc291cmNlIGZpbGVzOiJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJ0b29sdV8wMTVtUkpxVkNTQk5neXgxS0VtYkV6M3AiLCJuYW1lIjoid3JpdGUiLCJhcmd1bWVudHMiOnsicGF0aCI6InNyYy9jb25maWcudHMiLCJjb250ZW50IjoiLyoqXG4gKiBDb25maWd1cmF0aW9uIHNjaGVtYSBhbmQgbG9hZGVyIGZvciB0aGUgQXBlcnR1cmUgZXh0ZW5zaW9uLlxuICpcbiAqIEFwZXJ0dXJlQ29uZmlnIGlzIHRoZSB1c2VyLWZhY2luZyBzY2hlbWEgKGFsbCBmaWVsZHMgb3B0aW9uYWwpLlxuICogUmVzb2x2ZWRDb25maWcgaXMgdGhlIGludGVybmFsIHNjaGVtYSAoYWxsIGZpZWxkcyByZXF1aXJlZCwgZGVmYXVsdHMgYXBwbGllZCkuXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlnTG9hZGVyIH0gZnJvbSBcIkBhbGlvdS9waS11dGlscy1zZXR0aW5nc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwZXJ0dXJlQ29uZmlnIHtcbiAgYmFzZVVybD86IHN0cmluZztcbiAgcHJvdmlkZXJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRDb25maWcge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIHByb3ZpZGVyczogc3RyaW5nW107XG59XG5cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXNvbHZlZENvbmZpZyA9IHtcbiAgYmFzZVVybDogXCJcIixcbiAgcHJvdmlkZXJzOiBbXSxcbn07XG5cbmV4cG9ydCBjb25zdCBjb25maWdMb2FkZXIgPSBuZXcgQ29uZmlnTG9hZGVyPEFwZXJ0dXJlQ29uZmlnLCBSZXNvbHZlZENvbmZpZz4oXG4gIFwiYXBlcnR1cmVcIixcbiAgREVGQVVMVF9DT05GSUcsXG4gIHsgc2NvcGVzOiBbXCJnbG9iYWxcIl0gfSxcbik7XG4ifX1dLCJhcGkiOiJhbnRocm9waWMtbWVzc2FnZXMiLCJwcm92aWRlciI6ImFudGhyb3BpYyIsIm1vZGVsIjoiY2xhdWRlLW9wdXMtNC02IiwidXNhZ2UiOnsiaW5wdXQiOjEsIm91dHB1dCI6MjcyLCJjYWNoZVJlYWQiOjQ2MTUyLCJjYWNoZVdyaXRlIjo0MjUsInRvdGFsVG9rZW5zIjo0Njg1MCwiY29zdCI6eyJpbnB1dCI6MC4wMDAwMDUsIm91dHB1dCI6MC4wMDY4MDAwMDAwMDAwMDAwMDA1LCJjYWNoZVJlYWQiOjAuMDIzMDc2LCJjYWNoZVdyaXRlIjowLjAwMjY1NjI1LCJ0b3RhbCI6MC4wMzI1MzcyNX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc3MTM0NzU2NzAzNn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjQ4ZmJlMjYzIiwicGFyZW50SWQiOiI0NWQ0MDRhOSIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTk6MzMuMzEwWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoidG9vbHVfMDE1bVJKcVZDU0JOZ3l4MUtFbWJFejNwIiwidG9vbE5hbWUiOiJ3cml0ZSIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSB3cm90ZSA2NTggYnl0ZXMgdG8gc3JjL2NvbmZpZy50cyJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc3MTM0NzU3MzMwOH19LHsidHlwZSI6ImN1c3RvbSIsImN1c3RvbVR5cGUiOiJhZDp0ZXJtaW5hbC10aXRsZSIsImRhdGEiOnsidGl0bGUiOiLPgDogcGktdHMtYXBlcnR1cmUgKHdyaXRlKSJ9LCJpZCI6IjMzNDJmZTQ4IiwicGFyZW50SWQiOiI0OGZiZTI2MyIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTk6NTkuNDg5WiJ9LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjdlNTM0YWU0IiwicGFyZW50SWQiOiIzMzQyZmU0OCIsInRpbWVzdGFtcCI6IjIwMjYtMDItMTdUMTY6NTk6NTkuNDkwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoidG9vbHVfMDE0M0twMWJEdDZqY3VQVjlScWM3NlN0IiwibmFtZSI6IndyaXRlIiwiYXJndW1lbnRzIjp7InBhdGgiOiJzcmMvY29tbWFuZHMvc2V0dXAudHMiLCJjb250ZW50IjoiLyoqXG4gKiBhcGVydHVyZTpzZXR1cCAtLSBpbnRlcmFjdGl2ZSB3aXphcmQgZm9yIGNvbmZpZ3VyaW5nIEFwZXJ0dXJlLlxuICpcbiAqIFN0ZXBzOlxuICogMS4gQXNrIGZvciBBcGVydHVyZSBiYXNlIFVSTCAoSW5wdXQpXG4gKiAyLiBTZWxlY3QgcHJvdmlkZXJzIHRvIHJvdXRlIHRocm91Z2ggQXBlcnR1cmUgKEZ1enp5U2VsZWN0b3IsIG11bHRpLXNlbGVjdCBsb29wKVxuICogMy4gU2F2ZSBjb25maWcgYW5kIHJlZ2lzdGVyIHByb3ZpZGVyc1xuICovXG5cbmltcG9ydCB7IEZ1enp5U2VsZWN0b3IgfSBmcm9tIFwiQGFsaW91L3BpLXV0aWxzLXNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuc2lvbkFQSSB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWNvZGluZy1hZ2VudFwiO1xuaW1wb3J0IHsgZ2V0U2V0dGluZ3NMaXN0VGhlbWUgfSBmcm9tIFwiQG1hcmlvemVjaG5lci9waS1jb2RpbmctYWdlbnRcIjtcbmltcG9ydCB7IGdldFByb3ZpZGVycyB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLWFpXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCB9IGZyb20gXCJAbWFyaW96ZWNobmVyL3BpLXR1aVwiO1xuaW1wb3J0IHsgSW5wdXQsIEtleSwgbWF0Y2hlc0tleSwgdmlzaWJsZVdpZHRoIH0gZnJvbSBcIkBtYXJpb3plY2huZXIvcGktdHVpXCI7XG5pbXBvcnQgeyBjb25maWdMb2FkZXIgfSBmcm9tIFwiLi4vY29uZmlnXCI7XG5cbmZ1bmN0aW9uIGVuc3VyZVByb3RvY29sKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IHVybC50cmltKCk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIHRyaW1tZWQ7XG4gIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpIHx8IHRyaW1tZWQuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgcmV0dXJuIHRyaW1tZWQ7XG4gIH1cbiAgcmV0dXJuIGBodHRwOi8vJHt0cmltbWVkfWA7XG59XG5cbi8qKlxuICogU2ltcGxlIGlucHV0IHByb21wdCBjb21wb25lbnQgZm9yIHRoZSBiYXNlIFVSTCBzdGVwLlxuICovXG5jbGFzcyBVcmxQcm9tcHQgaW1wbGVtZW50cyBDb21wb25lbnQge1xuICBwcml2YXRlIGlucHV0OiBJbnB1dDtcbiAgcHJpdmF0ZSBkb25lOiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSB0aGVtZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2V0dGluZ3NMaXN0VGhlbWU+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRoZW1lOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZXR0aW5nc0xpc3RUaGVtZT4sXG4gICAgY3VycmVudFZhbHVlOiBzdHJpbmcsXG4gICAgZG9uZTogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQsXG4gICkge1xuICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcbiAgICB0aGlzLmRvbmUgPSBkb25lO1xuICAgIHRoaXMuaW5wdXQgPSBuZXcgSW5wdXQoKTtcbiAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0LnNldFZhbHVlKGN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuc2V0UGxhY2Vob2xkZXIoXCJhaS5wYW5nby1saW4udHMubmV0XCIpO1xuXG4gICAgdGhpcy5pbnB1dC5vblN1Ym1pdCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnB1dC5nZXRWYWx1ZSgpLnRyaW0oKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRvbmUoZW5zdXJlUHJvdG9jb2wodmFsdWUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaW5wdXQub25Fc2NhcGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLmRvbmUodW5kZWZpbmVkKTtcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHdpZHRoOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgbGluZXMucHVzaCh0aGlzLnRoZW1lLmxhYmVsKFwiIEFwZXJ0dXJlIFNldHVwXCIsIHRydWUpKTtcbiAgICBsaW5lcy5wdXNoKFwiXCIpO1xuICAgIGxpbmVzLnB1c2godGhpcy50aGVtZS5oaW50KFwiICBBcGVydHVyZSBiYXNlIFVSTDpcIikpO1xuICAgIGxpbmVzLnB1c2goYCAgJHt0aGlzLmlucHV0LnJlbmRlcih3aWR0aCAtIDQpLmpvaW4oXCJcIil9YCk7XG4gICAgbGluZXMucHVzaChcIlwiKTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgdGhpcy50aGVtZS5oaW50KFwiICBFbnRlcjogY29uZmlybSDCtyBFc2M6IGNhbmNlbFwiKSxcbiAgICApO1xuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIGludmFsaWRhdGUoKSB7fVxuXG4gIGhhbmRsZUlucHV0KGRhdGE6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXQuaGFuZGxlSW5wdXQoZGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlciBtdWx0aS1zZWxlY3QgY29tcG9uZW50LiBVc2VzIEZ1enp5U2VsZWN0b3IgZm9yIHNlYXJjaCxcbiAqIHRyYWNrcyBzZWxlY3RlZCBwcm92aWRlcnMsIGFuZCBsZXRzIHRoZSB1c2VyIGNvbmZpcm0gd2l0aCBDdHJsK1MuXG4gKi9cbmNsYXNzIFByb3ZpZGVyTXVsdGlTZWxlY3QgaW1wbGVtZW50cyBDb21wb25lbnQge1xuICBwcml2YXRlIGFsbFByb3ZpZGVyczogc3RyaW5nW107XG4gIHByaXZhdGUgc2VsZWN0ZWQ6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHRoZW1lOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZXR0aW5nc0xpc3RUaGVtZT47XG4gIHByaXZhdGUgZG9uZTogKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBmdXp6eTogRnV6enlTZWxlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0aGVtZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2V0dGluZ3NMaXN0VGhlbWU+LFxuICAgIHByb3ZpZGVyczogc3RyaW5nW10sXG4gICAgcHJlc2VsZWN0ZWQ6IHN0cmluZ1tdLFxuICAgIGRvbmU6ICh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpID0+IHZvaWQsXG4gICkge1xuICAgIHRoaXMuYWxsUHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBuZXcgU2V0KHByZXNlbGVjdGVkKTtcbiAgICB0aGlzLnRoZW1lID0gdGhlbWU7XG4gICAgdGhpcy5kb25lID0gZG9uZTtcblxuICAgIHRoaXMuZnV6enkgPSBuZXcgRnV6enlTZWxlY3Rvcih7XG4gICAgICBsYWJlbDogXCJTZWxlY3QgcHJvdmlkZXJzIChFbnRlciB0byB0b2dnbGUsIEN0cmwrUyB0byBjb25maXJtKVwiLFxuICAgICAgaXRlbXM6IHRoaXMuYWxsUHJvdmlkZXJzLFxuICAgICAgdGhlbWU
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment